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.
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不调用基类的构造函数的情况下初始化成员?
不过,您应该注意,当您使用虚拟继承时,您应该手动调用公共库的构造函数.
| 归档时间: |
|
| 查看次数: |
180 次 |
| 最近记录: |