c++ 继承,不太理解。
class A
{
public:
void show()
{
printDate();
}
void printDate()
{
cout<<"month/day/year"<<endl;
}
};
class B: public A
{
public:
void printDate()
{
cout<<"year/month/day"<<endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A a;
a.show();
B b;
b.show();
return 0;
}
为什么b.show()也输出month/day/year,A的printDate()不是被B的printDate()隐藏了吗?望各位仔细的给我这个菜鸟讲解下。c++各种规则真多。
[解决办法]
所谓隐藏,是指子类看不见父类的同一种签名的方法,并不是子类覆盖父类方法,而是重写了父类方法。当调用B调用show时,其实是调用了从A继承而来的show方法,因为是A的方法,在show是看不到B的printDate。如果printDate是一个虚方法,则父类的printDate方法将被覆盖。
[解决办法]
void show()
{
printDate();
}
printDate 是一个名字,首先要根据名字查找规则到到它的声明(name-lookup) ,根据规则,无论printDate 是否虚函数,都不会查到它派生类的名字. 所以只会找到A::printDate.
至于虚函数,那又是另一个知识点了.
看书吧, <c++ primer>