可能的重复:
C++:重写公共\私有继承
class base {
public:
virtual void doSomething() = 0;
};
class derived : public base {
private: // <-- Note this is private
virtual void doSomething()
{ cout << "Derived fn" << endl; }
};
现在如果我执行以下操作:
base *b = new derived;
b->doSomething(); // Calls the derived class function even though that is private
问题:
- 即使派生类函数是私有的,它也可以调用它。这怎么可能?
现在,如果我将继承访问说明符从 public 更改为 protected/private,则会出现编译错误:
'type cast' : conversion from 'derived *' to 'base *' exists, but is inaccessible
注意:我知道继承访问说明符的概念。因此,在第二种情况下,由于它派生为私有/受保护,因此无法访问。但我想知道第一个问题的答案。任何意见都将受到高度赞赏。
访问控制是在编译时而不是运行时实现的,而多态性(包括虚拟函数的使用)是运行时特性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)