一、构造函数初始化列表
推荐在构造函数初始化列表中进行初始化
构造函数的执行分为两个阶段
初始化段
普通计算段
(一)、对象成员及其初始化
C++ Code
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#include <iostream>
using namespace std; class Object { public: Object( int num) : num_(num) { cout << "Object " << num_ << " ..." << endl; } ~Object() { cout << "~Object " << num_ << " ..." << endl; } private: int num_; }; class Container { public: Container( int obj1 = 0, int obj2 = 0) : obj2_(obj2), obj1_(obj1) { cout << "Container ..." << endl; } ~Container() { cout << "~Container ..." << endl; } private: Object obj1_; Object obj2_; }; int main( void) { Container c( 10, 20); return 0; } |
从输出可以看出几点,一是构造对象之前,必须先构造对象的成员;二是对象成员构造的顺序与定义时的顺序有关,跟初始化列表顺序无关;三是构造的顺序和析构的顺序相反;四是如果对象成员对应的类没有默认构造函数,那对象成员也只能在初始化列表进行初始化。再提一点,如果类是继承而来,基类没有默认构造函数的时候,基类的构造函数要在派生类构造函数初始化列表中调用。
(二)、const成员、引用成员的初始化
C++ Code

本文深入探讨C++中的构造函数,特别是初始化列表的作用,强调const成员和引用成员必须在初始化列表中初始化。同时,详细解析拷贝构造函数的功能、调用场景及避免无限递归的方法。通过实例分析,阐述不同情况下拷贝构造函数的使用,包括形参为引用、返回值为对象等场景。
最低0.47元/天 解锁文章
1200

被折叠的 条评论
为什么被折叠?



