可能重复:
Public virtual function derived private in C++为什么成员函数仍然可以被访问,即使它被声明为“私有”?
class B
{
private:
int b;
public:
B(int i);
virtual void show()
{
cout<<"B::show()called. "<<b<<endl;
}
};
B::B(int i=0)
{
b=i;
}
class D:public B
{
private:
int d;
void show()
{
cout<<"D::show() called. "<<d<<endl;
}
public:
D(int i, int j);
};
D::D(int i=0, int j=0):B(i)
{
d=j;
}
void fun(B&obj)
{
obj.show();
}
/*if I redefine fun() as follow, the result would be the same
void fun(B*obj)
{
obj->show();
}
*/
int main()
{
D *pd=new D(5,8);
fun(*pd); //K
delete pd;
}
程序的输出是 “d ::显示()调用。”,这意味着在专用部分中声明的虚拟功能的D类被调用。你不觉得这很奇怪吗?一个班级的私人成员如何从外部访问?
这个问题有999999个重复。 – Puppy 2012-04-18 11:31:43
访问说明符只限制那些从类外部访问的访问。因此,如果你想写一些有趣的(D&)或有趣的(D *),就不能使用静态链接来访问D :: show()。使用具有公共成员show()的基类,您可以通过多态调用获得访问权限,这将通过兄弟实现的障碍。 Ughh! :)我只是试图用更直接的方式来解释它。 – parallelgeek 2012-04-18 11:41:26