构造函数的初始化表

1. 如果类存在继承关系,那么派生类中必须在初始化列表中调用基类的构造函数;

class A
{…
    A(int x);        // A的构造函数
};
class B : public A
{…
    B(int x, int y);    // B的构造函数
};

B::B(int x, int y): A(x)   // 在初始化表里调用A的构造函数
{
      …
}    

2. const数据成员必须在初始化列表中进行初始化。因为const常量是属于对象的常量,而不是整个类的常量,对于每个对象,常量的值是不同的,在初始化列表中进行初始化。

3. 类的数据成员初始化,分为对象成员,和一般数据成员。可以在初始化列表中进行,也可以在构造函数内部进行。对于对象成员,采用初始化列表会更方便,因为初始化列表中初始化对象成员,直接调用的是拷贝构造函数。如果在函数体内初始化对象成员,是需要先调用对象成员类的构造函数,再调用赋值运算符函数进行赋值。

class A
{…
    A(void);                // 无参数构造函数
    A(const A &other);        // 拷贝构造函数
    A & operate =( const A &other);    // 赋值函数
};

class B
{
public:
    B(const A &a);    // B的构造函数
private:
    A  m_a;            // 成员对象
};

B构造函数方法一:
B::B(const A &a): m_a(a)    //调用的是拷贝构造函数初始化m_a
{
   …
}
方法二:
B::B(const A &a)
{
m_a = a;//先调用A的构造函数,创建对象m_a,再调用A的赋值函数进行赋值
…
}
时间: 2024-11-09 04:23:00

构造函数的初始化表的相关文章

c++基础语法之构造函数和初始化表

笔者刚系统的重学了c++的语法,看到构造函数和初始化表这块,发现这块语法有点复杂且很杂,怕以后忘记,于是写下此篇,以后回忆之用. c++构造函数 3.构造函数(constructor) Class/struct  类名 { //构造函数 类名(形参表) {函数体} }: 1)构造函数名字和类名相同,没有返回类型 2)构造函数在对象被创建时自动被调用 3)构造函数主要负责对象的初始化,即初始化成员变量 4)构造函数在每个对象的生命周期,一定会被自动调用,但只会被调用一次 Class  A { A(

C++学习8 构造函数的参数初始化表

构造函数是一种特殊的成员函数,在创建对象时自动执行,主要用来进行初始化工作,例如对 private 属性的成员变量赋值. 对成员变量的初始化,除了在构造函数的函数体中一一赋值,还可以采用参数初始化表.请看下面的代码: class Student{ private: char *name; int age; float score; public: Student(char *, int, float); void say(); }; //在构造函数中采用参数初始化表 Student::Stude

使用参数初始化表来实现对数据成员的初始化

这是c++提供的一种机制,具体格式如下: 1 class BOX 2 { 3 public: 4 BOX(int h,int w ,int len); 5 private: 6 int height; 7 int width; 8 int length; 9 }; 10 11 使用参数初始化表初始化的方式: 12 13 BOX::BOX(int h ,int w ,int len):height(h), width(w), length(len){} 14 15 传统的方式是这样子写的: 16

C++ 初始化形式、变量初始化规则、类构造函数的初始化列表

类构造函数的初始化列表,举例 一个对象的构造分两部分,首先是分配空间,然后初始化. 只要有对象生成,不管是以什么形式生成,都会调用构造函数进行初始化. 然后下面有个例子,在蓝色区域Big类的复制构造函数中,使用初始化列表进行成员的初始化(方法1)没有问题,而如果不使用初始化列表.直接在函数里用里面注释掉的代码(方法2)则会报错:Base类没有合适的构造函数. // W3-课程作业2-4.cpp : Defines the entry point for the console applicati

C++构造函数:初始化的那些事

C++构造函数:初始化的那些事 说起C++的构造函数,大家绝不会陌生,似乎老生常谈,我一度也这么认为,但是有时概念的不清晰也许会使我们陷入莫名的困惑,下面我们就来初步的探索一下C++构造函数中那些有关初始化的事.(vs2010) 1.默认的初始化 想必大家都知道C++会在我们没有提供任何构造函数的情况下为我们提供默认的缺省的构造函数,而构造函数的作用无非两样,第一步分配空间,初始化成员变量.换句话说,当我们调用构造函数时,发生了下面两件事情: (1) 为对象非配足够的内存块,若是new关键字产生

C++学习笔记17,构造函数体内初始化数据成员与构造函数初始化器的区别(一)

在构造体内初始化数据成员是最常见的方法. 例如: #include <iostream> using namespace std; class A { private: int i; string s; public: A(int ii,string ss){ //在构造函数体内初始化数据成员 i=ii; s=ss; cout<<"ctor:i="<<i<<",s="<<s<<endl; } /

C++成员变量、构造函数的初始化顺序 [转]

C++成员变量.构造函数的初始化顺序 一.C++成员变量初始化 1.普通的变量:一般不考虑啥效率的情况下 可以在构造函数中进行赋值.考虑一下效率的可以再构造函数的初始化列表中进行 2.static 静态变量(本地化数据和代码范围): static变量属于类所有,而不属于类的对象,因此不管类被实例化了多少个对象,该变量都只有一个.在这种性质上理解,有点类似于全局变量的唯一性. 函数体内static变量的作用范围时该函数体,不同于auto变量,该变量内存只被分配一次,因此其值在下次调用时维持上次的值

C++中异常规格(异常抛出表)和 成员初始化表 的放置先后顺序

测试代码如下 #include <iostream> #include <cstdio> class CPoint{ public: CPoint(int x){ printf("has synax\n"); } CPoint(){ printf("no synax\n"); } }; class Point : public CPoint{ public: Point()throw() :CPoint(1){ } }; Point p; i

构造函数、初始化列表来初始化字段、析构函数、拷贝构造函数

#include <iostream> using namespace std; class Line { public: int getLength( void ); Line( int len ); // 简单的构造函数 Line( const Line &obj); // 拷贝构造函数 ~Line(); // 析构函数 private: int *ptr; }; // 成员函数定义,包括构造函数 Line::Line(int len) { cout << "