读书人

c++ 承袭不太理解

发布时间: 2013-03-19 17:22:05 作者: rapoo

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>

读书人网 >C++

热点推荐