关于继承
class A
{
public:
void f();
};
class B:private A
{
//A::f()在B类中是私有的
public:
void g();//可以访问A::f()
};
class C:public B
{
//A::f()在C类中是私有的
public:
void h();//不能可以访问A::f(),因为它在B类中是私有的
};
B b;
b.f();//错,因为A::f()在B类中是私有的
C c;
c.f();//错,因为C类继承了B类私有的A::f()
请告C::h()为何不能访问A::f()?
难道不能C::h()→B::g()→A::f()吗?
问题点数:10、回复次数:3Top
1 楼beyond_ml(man)回复于 2001-08-03 09:14:57 得分 5
哦?可我用g++编译下面的程序,可以通过啊。
class A
{
public:
void f();
};
class B:private A
{
public:
void g()
{
A::f();
}
};
class C:public B
{
public:
void h()
{
A::f();
}
};
int main()
{}
Top
2 楼magicblue(小飞侠)回复于 2001-08-03 17:18:27 得分 5
beyond_ml的那段可以运行。我这里没有编译器,所以说说想法。A::f();这种调用法指明了调用A中的f(),有强制的意味。继承的保护,私有机制应该不会限制这样的调用。如果是这样的void h(){f();}则会被继承机制限制。Top
3 楼9Q9Q()回复于 2001-09-10 09:24:22 得分 0
谢谢大家
Top




