读书人

沿袭中的重载重写及相应隐藏规则开启

发布时间: 2012-09-29 10:30:01 作者: rapoo

继承中的重载,重写及相应隐藏规则开启的时机

在C++中的继承中写函数的时候,我们问题会遇到重载,重写,隐藏函数这三大问题。在面向对象的程序设计中,对这三个概念的理解相应重要,否则会出现一些莫明其妙的事件。下面我们来解释下这三个的概念:

重载:即在同一个类中声明相同的函数名,但型参列表的参数类型与及参数的数目不同时,应会发生重载。

示例代码:

class A{public: virtual void print(string s){cout<<"A print()"<<endl;}};class B : public A{public://virtual void print(string s){//函数重写//cout<<"B print(string s)"<<endl;//}注释后,就出现隐藏现象了,一定要留意此规则void print(int x){//此时会发生隐藏,没有重载cout<<"B print(int a)"<<endl;}};int main(){B b;b.print("hello");  //error,此时b类中没有print(string s)类型的函数,被我们定义的同名函数隐藏了b.print(1);        //right, ->B print(int a) }
总结:如果只是单纯的重写、重载。我们可以理解的非常容易,但是有了隐藏规则后,我们发现理解的难度真是不在一个数量级上面。总结起来,我们只要记住什么时候开启隐藏规则后,就能轻松的避开陷阱了。只要记得下面三条原则,就Ok

1.基类没有virual函数,则子类定义了同名函数。开启隐藏规则。

2.基类有virual函数,但子类没有重写,又定义了同名函数。开启隐藏规则。

3.基类有virual函数,子类重写了函数,又定义了同名函数。关闭隐藏规则。

个人技术网站




读书人网 >编程

热点推荐