网站建设及政务公开工作,网站定制哪家快,信誉好的专业网站建设,网站开发深圳公司重载#xff1a;指在同一作用域内#xff0c;有多个同名但参数不同的函数的现象#xff0c;叫重载#xff1b;可以是任何用户定义的函数#xff0c;例如 类成员函数、类静态函数、普通函数重写#xff1a;子类重写父类的同名函数#xff0c;只要子类出现有父类的同名函数…重载指在同一作用域内有多个同名但参数不同的函数的现象叫重载可以是任何用户定义的函数例如 类成员函数、类静态函数、普通函数重写子类重写父类的同名函数只要子类出现有父类的同名函数父类中所有该名称的函数都被重写子类中无法再访问父类中定义该名称的函数不管子类函数的参数类型是什么。除了覆盖的情况。覆盖指子类实现了父类中的同名virtual函数且函数参数与返回值完全一致。
/*** 重载overload、重写overwrite、覆盖override的区别* * 重载指在同一作用域内有多个同名但参数不同的函数的现象叫重载* 覆盖是子类实现了一个与父类中同名同参数且virtual的函数* * 重写子类实现了一个与父类中同名的函数不管参数与返回值是否一致如果父类中的同名函数是虚函数且子类中的函数参数与返回值完全一致则是覆盖
*/#include iostream
#include string
using namespace std;class Animal
{public:void run(){cout Animal run endl;}void run(int speed) // overload{cout Animal run speed m/s endl;}virtual void eat(string food) // virtual function{cout Animal eat food endl;}
};class Rabbit : public Animal
{
public:void run(int speed) // overwrite所有run函数都被重写{cout Rabbit run speed m/s endl;}void eat(string food) override // override{cout Rabbit eat food endl;}void eat() // overload{cout Rabbit eat nothing endl;}
};int main()
{Animal *animal new Rabbit;animal-run();animal-run(100);animal-eat(apple);// animal-eat(); // 报错Animal无eat()定义Rabbit *rabbit (Rabbit *)animal;// rabbit-run(); // 会报错如果注释掉 Rabbit::run(int speed) 则可以运行所有同名函数都被重写rabbit-run(100);rabbit-eat(apple);rabbit-eat();return 0;
}