为什么要调用基础构造函数?

Sad*_*que 2 c++ visual-c++ c++11

好吧,我有一个非常基本的问题,所以请放轻松我.
在以下代码中:

#include<iostream>    

class base
{
      public:
             base() { std::cout << "Base()" << std::endl; }
};

class derived: base {
      public:
             derived() { std::cout << "Derived()" << std::endl; }
             };
int main() {
derived d;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

基础()

派生()

我想知道为什么base即使我正在创建derived类的对象,也会调用类的构造函数?我找不到合适的答案了FAQ.

Kir*_*sky 7

base调用类的构造函数来初始化base包含在其中的类子对象derived.这就是继承的工作原理,这使得更容易遵循Liskov替换原则.

考虑以下:

class base
{
public:
  base() : x(10) { std::cout << "Base()" << std::endl; }
private:
   int x;
};

class derived: base {
public:
  derived() { std::cout << "Derived()" << std::endl; }
};
Run Code Online (Sandbox Code Playgroud)

如何在base::x不调用基类的构造函数的情况下初始化成员?


不过,您应该注意,当您使用虚拟继承时,您应该手动调用公共库的构造函数.


Jer*_*fin 5

根据定义,派生对象也是基础对象.