' class a : b ' 和 ' class a : public b ' 之间的继承类不同

  • 本文关键字:class 继承 public 之间 c++
  • 更新时间 :
  • 英文 :


我正在了解C++,我有一个问题。

我正在学习虚函数,我发现为什么我们需要 cpp 中的虚函数。

我尝试了答案,现在我知道为什么我们需要虚拟功能,但我不明白,

下面的代码工作正常。

class a
{
public:
virtual void eat(){  std::cout<<"Eating A food." << endl;
};
class b : public a
{
public:
void eat(){  std::cout<<"Eating B food." << endl;
}
void eatFunction(a * alpha){ alpha -> eat(); }
int main(void)
{
a * apple = new a;
b * banana = new b;
eatFunction(apple);
eatFunction(banana);
return 0;
}

但我只是将class b: public a更改为发生错误class b : a

error: 'a' is an inaccessible base of 'b'
eatFunction(banana);

我什么时候应该使用"公共"继承父类?

有什么不同?

class b: public a{/*..*/};

b继承自公开a(即所有成员函数和 var 都在b中继承,访问说明符与它们在a中具有的访问说明符相同

class b: a{/*..*/};

b私下从a继承(即所有成员函数和 var 都b继承private访问说明符。 因此,您无法eatFunction类外部访问函数。

class b : a {};

class b : private a {};

因为abprivate基类,b*不能隐式转换为a*

最新更新