c++ 子类与父类的构造函数继承关系
规范上,子类构造函数肯定是会调父类的构造函数。
如果代码中没写,就会隐含调用父类的默认构造函数(即那个无参构造函数)。如果父类没有,编译报错。
1,展示了当子类要调用父类中带参数的构造函数 时:
#include <iostream> #include <cstdio> class A { public: A() { printf("A(void) \n"); } A(int d) { printf("A %d\n", d); } ~A() { printf(" ~A \n"); } }; class B : public A { public: B() { printf("B(void) \n"); } B(int x) : A(x) { printf("B \n"); } ~B() { printf("~B \n"); } }; int main(int argc, char* argv[]) { B c; B b(8); // This also automatically calls the same signature constructor of A return 0; }
2,如果子类没有调用父类,
即
以前的
B(int x) : A(x) {
printf("B \n");
}
改成了
B(int x) : A(x) {
printf("B \n");
}
这是默认调用 A() 这个构造。
如果去掉 A() { printf("A(void) \n"); } 构造,
B(int x) : A(x) {
printf("B \n");
}
这个编译不过。因为没有默认 A()了。
输出结果:
一句一句分析:
B c;
//首先调用A的无参(默认)构造函数,然后调用B的无参构造函数。
//所以先输出A(void),然后是B(void)
B b(8);
//首先调用A的有参构造函数,然后调用B的有参构造函数。
//所以先输出A 8,然后是B
如果,没有显示调用A的有参构造函数呢?
答案是:不会调用A的有参构造函数,只会调用A的无参(默认)构造函数。如下图:
========================
————————————————
版权声明:本文为CSDN博主「奔跑的龙少」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shine_journey/article/details/53188682
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?