nit*_*ian 5 c++ inheritance base-class derived-class
请考虑以下示例代码:
#include <iostream>
using namespace std;
class base
{
public:
base()
{
cout << "ctor in base class\n";
}
};
class derived1 : public base
{
public:
derived1()
{
cout <<"ctor in derived1 class\n";
}
};
class derived2 : public derived1
{
public:
derived2() : base()
{
cout << "ctor in derived2 class\n";
}
};
int main()
{
derived2 d2obj;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这给出了错误:
错误:类型`base'不是`derived2'的直接基础
为什么会出现此错误?如果我将基类设为虚拟,则错误不再存在.这是什么原因?
改变
class derived2 : public derived1
{
public:
derived2() : base()
{
cout << "ctor in derived2 class\n";
}
};
Run Code Online (Sandbox Code Playgroud)
到
class derived2 : public derived1
{
public:
derived2() : derived1()
{
cout << "ctor in derived2 class\n";
}
};
Run Code Online (Sandbox Code Playgroud)
这是因为您尝试从孙子 returned2调用base1构造函数。
如果将衍生1从base1的派生更改为虚拟的。从derivative2调用base1就可以了。更多详细信息请参见此处。