如本例所示,定义构造函数时并没有在函数体中对成员变量一一赋值,其函数体为空(当然也可以有其他语句),而是在函数首部与函数体之间添加了一个冒号:,后面紧跟m_name(name), m_age(age), m_score(score)语句,这个语句的意思相当于函数体内部的m_name = name; m_age = age; m_score = score;语句,也是赋...
Point( int x, int y, string name ){ _x = 0; _y = 0; _name = name; } _name = name 这个表达式会调用string类的缺省构造函数一次,再调用Operator=函数进行赋值一次。所以需调用两次函数:一次构造,一次赋值 用初始化列表进行初始化 Point( int x, int y, string name ):_x(x),_y(y), _na...
首先要了解的是初始化成员变量的两种方式: classA{public:intm_a;intm_b; A(inta,intb); }//采用初始化列表A:A(inta,intb):m_a(a),m_b(b){ }//采用构造函数内赋值A:A(inta,intb){ m_a=a; m_b=b; } 可以看到成员变量初始化的两种方式:采用初始化列表/采用构造函数内赋值的方式是比较明显...
构造函数的初始化列表包含三项:NBAIO_Sink()、mStream(stream)和mStreamBufferSizeBytes(0)。 NBAIO_Sink()这一项表示调用基类NBAIO_Sink的默认构造函数来初始化基类部分。 mStream(stream)这一项表示使用传入的stream参数来初始化成员变量mStream。 mStreamBufferSizeBytes(0)这一项表示使用常量0来初始化成员变量mStre...
初始化列表先于构造函数的函数体执行 /* 1 C 中提供了初始化列表对成员变量进行初始化 2 使用初始化列表出现原因: 1.必须这样做: 如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数, 而没有默认构造函数,这时要对这个类成员进行初始化,就必须调用这个类成员的带参数...
您可能已经猜到了,编译器将对字段进行初始化,就像在“成员初始化列表”中初始化字段一样。因此,它们在调用构造函数的主体之前会获取默认值。 换句话说,编译器将扩展代码: int a { initA() }; std::string b { initB() }; SimpleType() { } ...
列表初始化是给数据成员分配内存空间时就进行初始化,就是说分配一个数据成员只要冒号后有此数据成员的赋值表达式(此表达式必须是括号赋值表达式),那么分配了内存空间后在进入函数体之前给数据成员赋值,就是说初始化这个数据成员此时函数体还未执行。2)一个派生类构造函数的执行顺序如下:①虚拟基类的构造函数(多个虚拟...
初始化程序列表用于初始化类的数据成员。构造函数将要初始化的成员列表表示为逗号分隔的列表,后跟冒号。下面是一个使用初始化程序列表初始化Point类的x和y的示例: #include<iostream>usingnamespacestd;classPoint{private:intx;inty;public:Point(inti=0,intj=0):x(i),y(j){}/* The above use of Initializer...
正确答案:C解析:在C++中,构造函数不能被继承,因此;派生类的构造函数必须通过调用基类的构造函数来初始化基类子对象。所以,在定义派生类的构造函数时,除了对自己的数据成员进行初始化外,还必须负责调用基类构造函数使基类的数据成员得以初始化。如果派生类中还有子对象,还应包含对子对象初始化的构造函数。但是它不负责...