c++ - CPP中构造函数的继承
问题描述
#include <iostream>
using namespace std;
class A{
public:
A(){
cout << "Hello World";
}
};
class B:public A{
public:
B(){
cout << "World";
}
};
int main(){
B obj1;
return 0;
}
为什么这个程序打印Hello WorldWorld,它不应该打印World,因为我已经创建了B类的对象,那么为什么会调用A的构造函数呢?
解决方案
从概念上讲,基类成为派生类中的未命名子对象,其成员在相同范围内可用,无需额外限定,并且必须初始化。
您无法避免该初始化 - 这意味着将调用相关的构造函数,或者如果无法构造它,则编译器将不允许您继承。
您可能的意思是构造函数是否应该覆盖基本版本,简单的答案是它不能。如果你想要那种效果——这在构造函数中以常识的方式不起作用——你需要使用虚函数和覆盖。
推荐阅读
- excel - 无法格式化/形成数据透视表以查看我想要的数据
- python - 循环通过列数不一致的csv文件
- android - 从具有 singleTask Activity 的应用程序图标启动时,任务堆栈被重置为 root;为什么?
- ckeditor - ckeditor4 自动完成插件在提交时添加行为
- python - 在 Plotly Dash 中的字典中设置滑块上的标记
- css - CSS var() 回退是否在不受支持的浏览器中工作?
- oauth-2.0 - OAuth 2.0/2.1 - 资源所有者密码凭证授予替代方案
- javascript - 如何从python中的JavaScript标签获取数据?
- c++ - 将类型插入 std::map 时出现“没有匹配的函数调用”
- r - 有没有办法根据名称向量进行过滤?