【发布时间】:2011-08-23 03:14:42
【问题描述】:
可能重复:
Why can i access a derived private member function via a base class pointer to a derived object?
#include <iostream>
using namespace std;
class B {
public:
virtual void fn1(void) {cout << "class B : fn one \n"; }
virtual void fn2(void) {cout << "class B : fn two \n"; }
};
class D: public B {
void fn1(void) {cout << "class D : fn one \n"; }
private:
void fn2(void) {cout << "class D : fn two \n"; }
};
int main(void)
{
B *p = new D;
p->fn1();
p->fn2();
}
为什么p->fn2() 调用派生类函数,即使fn2 在D 中是私有的?
【问题讨论】:
-
C++99 中的第 11.6 节。 D 中的 fn1 也将默认为私有,因为未指定。
-
@Georg:垃圾问题标题如何帮助破坏 Stack Overflow 的有趣示例。这个问题的标题很好。
-
@Tomalak Geret'kal 您可以随时编辑其他问题以使用相同的标题。我现在正在考虑这样做。你怎么看?
-
@Georg:干杯:D 我投票结束这个问题作为 dup,心情沉重。对不起巴拉斯。
-
@Hosam:已经完成了。
标签: c++ inheritance polymorphism access-modifiers