尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

C++构造函数的初始化列表详解

C++构造函数的初始化列表详解
📅 发布时间:2026/7/13 6:37:11

1.问题

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

classA {

private:

intm_a;

public:

A(inta) {

cout <<"A(int a)......."<< endl;

m_a = a;

}

voidprint() {

cout <<"m_a="<< m_a << endl;

}

};

classB {

private:

intm_b;

A m_a1;

A m_a2;

public:

B(A& a1,A& a2,intb)

{

m_b = b;

m_a1(a1);//此处调用A的拷贝函数会报错

m_a2(a2);//此处调用A的拷贝函数会报错

}

};

错误:

2.解决方法(初始化列表)

将class B构造函数改写为:

1

2

3

4

5

6

public:

B(A& a1,A& a2,intb) :m_a1(a1),m_a2(a2)//构造函数的初始化列表

{

m_b = b;

}

};

完整代码如下:

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

41

42

43

44

#include <iostream>

usingnamespacestd;

classA {

private:

intm_a;

public:

A(inta) {

cout <<"A(int a)......."<< endl;

m_a = a;

}

voidprint() {

cout <<"m_a="<< m_a << endl;

}

A(constA& another) {

m_a = another.m_a;

}

~A() {

cout <<"~A()......"<< endl;

}

};

classB {

private:

intm_b;

A m_a1;

A m_a2;

public:

B(A& a1,A& a2,intb) :m_a1(a1),m_a2(a2)//构造函数的初始化列表,调用拷贝构造

{

cout <<"B(A& a1,A& a2, int b)......."<< endl;

m_b = b;

}

~B() {

cout <<"~B()......."<< endl;

cout <<"m_b="<< m_b << endl;

cout <<"A m_a1"<< endl;

m_a1.print();

cout <<"A m_a2"<< endl;

m_a2.print();

}

};

intmain(intargc,char** argv) {

A a1(1), a2(2);

B b1(a1, a1, 3);

}

运行结果:

3.顺序问题

构造对象成员的顺序跟初始化列表的顺序无关,而是跟成员对象定义的顺序有关。(面试会问)

例子:

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

classA {

private:

intm_a;

public:

A(inta) {

cout <<"A(int a)......."<<a<< endl;

m_a = a;

}

voidprint() {

cout <<"m_a="<< m_a << endl;

}

A(constA& another) {

m_a = another.m_a;

}

~A() {

cout <<"~A()......"<< endl;

}

};

classB {

private:

intm_b;

A m_a2;

A m_a1;

public:

B(inta1,inta2,intb) :m_a1(a1), m_a2(a2)//调用有参构造函数

{

cout <<"B(int a1, int a2, int b)......."<< endl;

m_b = b;

}

~B() {

cout <<"~B()......."<< endl;

}

};

intmain(intargc,char** argv) {

B b2(1, 2, 3);

}

结果:

跟下面顺序有关:

1

2

3

private:

A m_a2;

A m_a1;

跟下面顺序无关:

1

B(inta1,inta2,intb) :m_a1(a1), m_a2(a2)//调用有参构造函数

总结

本篇文章就到这里了,希望能够给你带来帮助

相关新闻

  • 遗传算法工程化实战:选择、交叉与变异的可调试设计
  • 网络安全工具链配置:Kali Linux 2024.2 + 5款核心工具实战环境搭建指南
  • 学术写作的超级快充!好用的AI论文平台,逻辑清晰质量高

最新新闻

  • STM32F756ZG与ADS1262高精度数据采集系统设计
  • MP2672A双节锂电池充电管理与PIC18F86K22系统设计
  • Keil 插件集成:AStyle代码格式化与注释模板的2种自动化方案对比
  • C++函数指针深度解析:从基础语法到现代回调机制实战
  • ComfyUI节点式AI绘画工作流:从原理到秋叶整合包实战指南
  • UHF RFID Gen2 标签锁定实战:4种状态与2种密码场景下的读写权限矩阵

日新闻

  • AI推荐结果怎么优化:适合深圳少儿素质培训机构的GEO服务商哪家好?全程零代码SAAS操作
  • RAG 实战教学完全指南
  • 企业级API网关架构深度解析:IBM Microgateway的技术实现与选型指南

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号