【发布时间】:2012-01-15 04:32:00
【问题描述】:
考虑下面的示例代码:
#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;
}
这给出了错误:
错误:类型 `base' 不是 `derived2' 的直接基类
为什么会出现这个错误?如果我将基类设为虚拟,则错误不再存在。这是什么原因?
【问题讨论】:
-
不应该
derived2() : base()是derived2() : derived1()? derived2 不从 base 继承。 -
不是这样,derived2 也继承自 base,因为它继承自 derived1。实际上,derived2 对象包含 derived1 对象和基础对象。
-
抱歉它没有直接继承自
base -
是的,我同意,它不直接继承。所以你不能直截了当地说
derived2 doesn't inherit from base。谢谢指正:)
标签: c++ inheritance derived-class base-class