东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 1494|回复: 4
打印 上一主题 下一主题

[C/C++] C++新语法:构造函数的初始化列表Demo

[复制链接]

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14439
QQ
跳转到指定楼层
楼主
发表于 2021-5-28 09:43:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式



C++新语法:构造函数的初始化列表Demo




  1. #include <iostream>

  2. using namespace std;


  3. class A
  4. {
  5. private:
  6.     int x,y;
  7. public:
  8.    
  9.     A(int _x, int _y){
  10.         x = _x;
  11.         y = _y;
  12.         cout << "类A的有参的构造函数!x=" << x << endl;
  13.     }

  14.     ~A(){
  15.         cout << "类A的析构函数!x=" << x << endl;
  16.     }
  17.     int get_x(){
  18.         return x;
  19.     }
  20.     void set_x(int _x){
  21.         x = _x;
  22.     }
  23. };

  24. //C++新语法:构造函数的初始化列表Demo
  25. class B
  26. {
  27. private:
  28.     int x,y;
  29.     A a2, a1;
  30.     //一个类里面包含另外一个类的对象作为成员变量,而被包含的类对象只能用有参的构造函数,此时才需要用到【构造函数的初始化列表】
  31.     //构造函数的调用规则:写了就必须要用!  没有机会初始化被包含的类对象a1和a2!编译器不知道该分配多少内存
  32.     //新的语法: 类名::构造器(): a1(3,4),a2(5,6)
  33. public:
  34.     B(int _x, int _y) : a1(3,4), a2(5, 6){
  35.         x = _x;
  36.         y = _y;
  37.         cout << "类B的有参的构造函数!x=" << x << endl;
  38.     }

  39.     B(int _x, int _y, int m, int n, int q, int t) : a1(m,n), a2(q, t){
  40.         x = _x;
  41.         y = _y;
  42.         cout << "类B的有参的构造函数!_顺便传参给被包含的类对象 x=" << x << endl;
  43.     }


  44.     ~B(){
  45.         cout << "类B的析构函数!x=" << x << endl;
  46.     }
  47.    
  48. };


  49. int main(){

  50.     //B bb(10,20);
  51.     B bbb(10,20, 100,200,300,400);
  52.     // 先执行被包含对象的构造函数,如果被包含对象有多个,则按定义顺序来构造 而不是初始化列表顺序来构造
  53.     // 析构函数:与构造函数的调用顺序相反


  54.     return 1;
  55. }


复制代码


让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14439
QQ
沙发
 楼主| 发表于 2021-5-28 10:00:02 | 只看该作者
private:
    int x,y;
    A a2, a1;
    const int j;
    // 注意:构造函数的初始化列表用来给 const属性赋值!
public:
    B(int _x, int _y) : a1(3,4), a2(5, 6), j(1){
        x = _x;
        y = _y;
        cout << "类B的有参的构造函数!x=" << x << endl;
    }
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14439
QQ
板凳
 楼主| 发表于 2021-5-28 10:00:11 | 只看该作者

    // 注意:构造函数的初始化列表用来给 const属性赋值!// 注意: 构造函数的初始化列表   可以用在 有参 无参 copy构造函数的 后面  都可以  用:隔开


让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14439
QQ
地板
 楼主| 发表于 2021-5-28 11:02:21 | 只看该作者
// 都是动态分配堆空间
// c  malloc() free()  是函数
// c++   new  delete   不是函数  是操作符  注意数组的: delete [] 数组名指针;
// new可以:基础类型 数组类型 复杂类对象

// 交叉着来(基础类型和基础类型的数组都没问题): malloc() delete
//          new    free()  
// malloc()不会调用类的构造函数 free()不会调用类的析构函数
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

0

主题

98

帖子

200

积分

中级会员

Rank: 3Rank: 3

积分
200
5#
发表于 2021-11-23 19:42:30 | 只看该作者
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|人工智能工程师的摇篮 ( 湘ICP备2020019608号-1 )

GMT+8, 2024-5-19 12:16 , Processed in 0.186149 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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