九、构造函数和析构函数(三) 初始化列表、对象成员初始化、const,引用成员初始化
2014-12-28 18:04
393 查看
一、构造函数初始化列表
构造函数的执行分为两部分,首先执行初始化段,在执行{}内的普通计算段。推荐在构造函数初始化列表中进行初始化,这样执行效率比较高。
二、对象成员及其初始化
对象成员的初始化必须在初始化列表中初始化,如下:
三、const成员、引用成员初始化
因为const成员、引用成员在声明时必须被初始化,所以类成员中的const成员和引用成员也必须在初始化列表中初始化。
构造函数的执行分为两部分,首先执行初始化段,在执行{}内的普通计算段。推荐在构造函数初始化列表中进行初始化,这样执行效率比较高。
class Test { public: Test(int a,int b,int c) :x(a),y(b),z(c){}//在初始化列表中初始化,效率较高,若在计算段{ x=a; y=b; z=c; },调用赋值操作,效率较低 private: int x; int y; int z; }; int main() { Test(1,2,3); }
二、对象成员及其初始化
对象成员的初始化必须在初始化列表中初始化,如下:
class Object { public: Object(int num) : num_(num) { cout<<"Object "<<num_<<" ..."<<endl; } ~Object() { cout<<"~Object "<<num_<<" ..."<<endl; } private: int num_; }; class Test { public: Test(int a,int b) :x(a),obj(b){} private: Object obj; int x; }; int main() { Test(1,2); }在有对象成员的类中,先调用对象成员的构造函数初始化对象成员,在初始化类自身。
三、const成员、引用成员初始化
因为const成员、引用成员在声明时必须被初始化,所以类成员中的const成员和引用成员也必须在初始化列表中初始化。
class Test { public: Test(int a,int b) :x(a),ref(b) { cout<<"const x="<<x<<endl<<"refrence ref="<<ref<<endl; } private: const int x; int& ref; }; int main() { Test(1,2); }
相关文章推荐
- 从零开始学C++之构造函数与析构函数(二):初始化列表(const和引用成员)、拷贝构造函数
- 从零开始学C++之构造函数与析构函数(二):初始化列表(const和引用成员)、拷贝构造函数
- 从零开始学C++之构造函数与析构函数(二):初始化列表(const和引用成员)、拷贝构造函数
- 从零开始学C++之构造函数与析构函数(二):初始化列表(const和引用成员)、拷贝构造函数
- C++的6大成员函数,构造函数(初始化列表),析构函数,拷贝构造函数,运算符重载,const成员函数
- const成员或者引用成员必须使用构造函数初始化列表的方式
- C++中的初始化列表、const修饰的成员、友元类和友元函数、内联函数、static成员、构造函数的优化
- C++的const和引用只能在初始化列表里初始化而不能在构造函数体内赋值初始化
- C++中类的构造函数与析构函数(成员初始化列表)
- c++高级---C++类构造函数初始化列表以及对象成员的构造
- 为什么对于类的const成员,只能使用初始化列表,而不能在构造函数内部进行赋值操作
- 类成员的初始化--成员初始化列表(常量,引用,成员对象)
- 成员变量的初始化顺序与变量在类型中的申明顺序相同,而与它们在构造函数的初始化列表中的顺序无关
- C++初始化列表问题,类中有一个对象类型的数组成员变量,在初始化列表中初始化时报错“[]”操作符语法错误
- 多个类中包含子对象时(构造函数,析构函数,初始化列表顺序)
- C++ 中构造函数对父类及成员对象的初始化时机
- 十二章 类————初始化const或引用类型要用初始化列表,隐式转换问题等,友元
- 定义Point类的无参数构造函数,将point对象的数据成员初始化为0。
- 定义一个描述“点”的类及该类的对象,并使用构造函数初始化数据成员
- c++中子对象的初始化可在复合类的构造函数的函数体内进行吗?还是子对象的初始化只能在初始化列表中进行?