很多初学者朋友可能都傻傻分不清覆盖方法和重载方法的区别是什么,那么小雨今天就以实例来给朋友们讲解一下。
首先说覆盖方法,让我们看下面的例子:
class Animal { public: void move(); } class Pig : Animal { public: void move(); } class Bird : Animal { public: void move(); } void Animal :: move() { std::cout << "我会动哦\n"; } void Pig :: move() { std::cout << "我会跑哟\n"; } void Bird :: move() { std::cout << "我会飞呢\n"; }
相信各位看完这个程序就明白的差不多了,我们声明Animal这个类,子类Pig和Bird都继承自Animal类,猪和鸟动的方式自然不同,所以要对父类方法进行覆盖,首先在子类中将要覆盖的方法再声明一次,再实现一次,这就是方法覆盖。
而重载方法则不同,我们对上面的例子中的父类做一下修改:
class Animal { public: void move(); void move(int movCount); } void Animal :: move() { std::cout << "我会动哦\n"; } void Animal :: move(int movCount) { std::cout << "我移动了"<< movCount <<"这么远哦\n"; }
上述就是方法重载,即同一个函数名,参数不同,实现不同的功能,move(int movCount)可
以显示出移动的距离。
那我们现在来做总结:
·方法覆盖要求参数签名必须一致,而方法重载要求参数签名必须不一致。
·方法覆盖要求返回类型必须一致,而方法重载对此不做限制。
谢谢!
转载于:https://blog.51cto.com/sydugu/1553414