首页 > 解决方案 > 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的构造函数呢?

标签: c++c++17

解决方案


从概念上讲,基类成为派生类中的未命名子对象,其成员在相同范围内可用,无需额外限定,并且必须初始化。

您无法避免该初始化 - 这意味着将调用相关的构造函数,或者如果无法构造它,则编译器将不允许您继承。

您可能的意思是构造函数是否应该覆盖基本版本,简单的答案是它不能。如果你想要那种效果——这在构造函数中以常识的方式不起作用——你需要使用虚函数和覆盖。


推荐阅读