鱼C论坛

 找回密码
 立即注册
查看: 2736|回复: 0

[学习笔记] 028-C++之构造函数进阶

[复制链接]
发表于 2018-8-31 23:14:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 moc 于 2018-8-31 23:12 编辑

1、C++编译器提供构造函数规则
1. 当一个类中没有定义任何的构造函数时,C++编译器会自动为我们提供无参和拷贝构造函数;
2.当类中定义了有参或是拷贝构造函数,C++编译器便不会再提供无参构造函数
3.C++编译器提供的拷贝构造函数,是浅拷贝的方式。

2、构造函数初始化列表
C++中提供了初始化列表对类成员变量进行初始化
        使用初始化列表出现原因:
                1.必须这样做:
                        如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,
                        而没有默认构造函数,这时要对这个类成员进行初始化,就必须调用这个类成员的带参数的构造函数,
                        如果没有初始化列表,那么他将无法完成第一步,就会报错。

                2.类成员中若有const修饰,必须在对象初始化的时候,给const int m 赋值
                        当类成员中含有一个const对象时,或者是一个引用时,他们也必须要通过成员初始化列表进行初始化,
                        因为这两种对象要在声明后马上初始化,而在构造函数中,做的是对他们的赋值,这样是不被允许的。
注意:类里变量的初始化顺序根据变量的定义顺序,而不是初始化列表的顺序。
拷贝构造函数也可以带初始化列表。
  1. class DD
  2. {
  3. public:
  4.         DD(int d) //DD中定义了有参构造函数
  5.         {
  6.                 cout<<d<<endl;
  7.                 m_d = d;
  8.         }
  9. private:
  10.         int m_d;
  11. };

  12. class EE
  13. {
  14. public:
  15.         //构造函数的初始化列表, d1(),d2()里的参数可以通过EE()中传过来
  16.         EE(int _a):d2(1),d1(_a)
  17.         {
  18.                 a = _a;
  19.                 cout<<_a<<endl;
  20.         }

  21. protected:
  22. private:
  23.         int a;
  24.         DD d1;   //按照变量定义的顺序
  25.         DD d2;
  26. };
  27. void main()
  28. {
  29.         EE e1(3);    // 先调用EE的构造函数,初始化属性a,在去调用DD的构造函数初始化d1,最后初始化d2
  30.         system("pause");   
  31. }
复制代码

上面未为变量搭建舞台,正常退出时,先析构d2,在析构d1,最后析构e1,先创建的后析构
3、临时匿名对象
        可以在程序中直接调用构造函数,这是会创建一个临时匿名对象。
  1. ABCD(400, 500, 600);     //直接调用类的构造函数,会创建一个临时匿名对象,先调用它的有参构造函数,然后发现没人接受他,他马上又会执行析构函数。
  2. ABCD abcd = ABCD(100, 200, 300);  // 这回有人接这个,直接把这个临时匿名对象给abcd, abcd也不用从新申请内存空间啦,也就是有参构造的第三种方式
  3. ABCD abc;
  4. abc =  ABCD(1, 2, 4);     //这样也是可以的,创建临时对象,临时对象给别的对象赋值,然后临时对象再析构
复制代码

注意:在构造函数中调用构造函数
构造函数中是不能调用构造函数的,它只会创建临时对象,而且马上又会被析构。
122233.jpg


本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-22 07:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表