类定义如下:
#include<iostream> #include<functional> #include<string> using namespace std; class Parent { public: Parent () { cout<<"Parent () "<<endl; } ~ Parent () { cout<<"~Parent()"<<endl; } virtual void vDis() { cout<<"Parent::virtual void vDis()"<<endl; } void Dis() { cout<<"Parent::void Dis()"<<endl; } }; class Child:public Parent { public: Child() { cout<<"Child"<<endl; } ~Child() { cout<<"~Child"<<endl; } void vDis() { cout<<"Child::void vDis()"<<endl; } void vDis(string s) { cout<<"Child::void vDis(string s)"<<s<<endl; } void Dis() { cout<<"Child::void Dis()"<<endl; } };考虑如下代码: int main() { Child c; c.vDis(); c.vDis("TEST"); c.Dis(); return 0; } 结果输出如下:
Parent () Child Child::void vDis() Child::void vDis(string s)TEST Child::void Dis() ~Child ~Parent()
结果分析:
第一句函数调用是重写,这一句是如何调用的已经在我上一篇文章中进行了讲解,如果不清楚可以看一下(http://blog.csdn.net/u010857719/article/details/52215091)。 第二句是隐藏的第二种情况,此时基类中被重写的函数没有virtual修饰,第三句是隐藏的第一种情况,此时基类中被隐藏的函数不能有virtual修饰,并且子类函数名,参数列表,返回值类型与基类的完全一样。
以上是我关于隐藏与重写之间区别的一点理解,若有错误,请批评指正,谢谢。
