【问题标题】:Inheritance of Constructor in CPP [duplicate]CPP中构造函数的继承[重复]
【发布时间】:2021-06-30 18:49:57
【问题描述】:
#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的构造函数?

【问题讨论】:

  • 两者都会打印。 A的构造函数会先被调用,然后是B的
  • 但我的问题是:为什么要调用 A 的构造函数? @TedLyngmo
  • 为什么不希望A 的成员被初始化?它们不会被B 的构造函数初始化。也许B 甚至无法访问A 的所有成员,它是否知道初始化A 的成员变量的值是什么

标签: c++ c++17


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 2022-01-26
    • 2012-05-26
    • 2017-12-05
    相关资源
    最近更新 更多