【发布时间】:2021-11-10 06:50:02
【问题描述】:
下面是我的基类:
Vehicle
{
protected: //members being inherited
public:
void getDetails();
};
这是我的派生类:
class Car : protected Vehicle
{}
现在我正在尝试通过派生类对象访问基类的公共函数。根据我的理解,基类的公共功能是由派生类继承的,所以它应该可以工作。
Car obj2;
obj2.getDetails(); /*Public func of base class*/
但我收到如下错误: 'Vehicle::getDetails' 无法访问,因为 'Car' 使用 'protected' 从 'Vehicle' 继承
有人可以解释一下吗?我错过了什么?
【问题讨论】:
-
你缺少的是“正常”的 public 继承。
-
如果您希望方法保留
public,为什么要使用protected继承?也许Difference between private, public, and protected inheritance 值得一看。 -
@Quimby 我只是在学习 OOPs 概念,从 C 语言转移。所以如果可以的话,你能详细说明为什么这是不好的做法吗?
-
@Magzash 不用担心,这不是坏习惯,只是使用不正确。
protected继承使所有基类的公共方法protected,因此得名。由于您希望getDetails保持公开状态,因此您希望public继承。请参阅我链接的答案,它很好地概述了关键字的工作原理。protected表示只能从类内部和派生类内部调用。private只允许前者。
标签: c++ inheritance compiler-errors visual-studio-2019