【发布时间】:2014-06-21 06:57:38
【问题描述】:
我正在尝试在 C++ 中进行继承。我写了以下代码:
#include <stdio.h>
class A
{
public:
virtual void foo();
};
class B: A
{
void foo();
};
void B::foo()
{
printf("Derived class");
}
void A::foo()
{
printf("Base class");
}
int main()
{
A *a= new B();
a->foo();
}
但我有一个错误描述为
test.cpp:在函数“int main()”中:test.cpp:26:14:错误:“A”是 “B”的不可访问的基础
如果我将class B: A 行替换为class B: public A,它工作正常。但是使用这个事实我真的不明白在什么情况下可能需要private 和protected 继承。现在对我没用了。
【问题讨论】:
-
public继承引入了其他代码可见和可用的 IS-A 关系。protected继承限制了对派生类的关系可见性。private继承仅限于此类。这有助于避免客户端代码与实现细节相关联。但是,private继承是一种特殊情况,因为从基类继承的虚拟成员函数在派生类中仍然是虚拟的(并且可以在派生类中被覆盖),只是无法调用。 -
关于该主题的另一篇 SO 帖子:stackoverflow.com/questions/860339/…
标签: c++ inheritance