欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

C++ 覆盖方法、重载方法的理解

发布时间:2024/2/28 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C++ 覆盖方法、重载方法的理解 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

辨析

覆盖

如何覆盖?覆盖就是将基类的方法,在子类重新声明一次,然后再改写一下它的实现代码。

  • 名称、参数、返回值都必须与原方法相同

重载

重载,是同一类中,方法名相同,参数列表不同的一组方法的定义。

  • 重载只能在同一类中。
  • 不能对从基类继承来的方法进行重载,基类中重载的方法在子类中可以调用。

代码

代码一

这个程序中重载的方法不能在子类中调用,是因为同名的方法countsomething在重载后,又被覆盖。

经过修改,代码二(下一个代码块)同时实现了重载和覆盖。实现方式:对一个方法eat进行重载,对另一个方法countsomething进行覆盖。

#include<iostream> #include<string> //Animal基类 class Animal { public:std::string name;//属性std::string color;//属性Animal(std::string name);//构造器void eat();void countsomething(int count_fish);void countsomething();//方法的重载 }; //子类 class Fish :public Animal { public:Fish(std::string name);//构造器void fishspeak();void countsomething(int count_fish);//覆盖方法 }; //Animal基类构造器 Animal::Animal(std::string name) {this->name = name;this->color = "red"; } //Fish子类构造器 Fish::Fish(std::string name) :Animal(name)//使用的其实是基类的构造器 {this->name = name;this->color = "green"; } //基类方法 void Animal::eat() {std::cout << "我在Animal类,I am eating" << std::endl; } void Animal::countsomething(int count_fish) {std::cout << "我在Animal类,我正在数魔鬼鱼,一共" << count_fish << "条魔鬼鱼" << std::endl; } void Animal::countsomething()//方法的重载 {std::cout << "(我在Animal类重载)你不告诉我有多少,我怎么数?" << std::endl; } //子类方法 void Fish::fishspeak() {std::cout << "我在Fish类,我会说话,我的名字叫" << this->name << ",我的颜色是" << this->color << std::endl;//此处this可省略 } void Fish::countsomething(int count_fish)//覆盖方法 {std::cout << "(我在Fish类覆盖)我正在数魔鬼鱼,一共" << count_fish << "条魔鬼鱼" << std::endl; } int main() {Animal animal1("IAmAnimal");//创建一个基类对象animal1Fish fish1("MoGuiYu");//创建一个子类对象fish1,其name属性为MoGuiYufish1.fishspeak();//子类自己的函数fish1.countsomething(256);//子类继承的函数fish1.eat();//子类继承的函数std::cout << std::endl;animal1.countsomething();//重载的方法//重载只能在同一类中。不能对从基类继承来的方法进行重载,但基类中重载的方法可以在子类中调用//fish1.countsomething();//错误的调用,不能运行,原因:重载有效,但重载后被覆盖过std::cout << std::endl;std::cout << "基类animal1" << std::endl;std::cout << "名称:" << animal1.name << std::endl;std::cout << "颜色:" << animal1.color << std::endl << std::endl;std::cout << "子类fish1" << std::endl;std::cout << "名称:" << fish1.name << std::endl;std::cout << "颜色:" << fish1.color << std::endl << std::endl;system("pause"); }

代码二

#include<iostream> #include<string> //Animal基类 class Animal { public:std::string name;//属性std::string color;//属性Animal(std::string name);//构造器void eat();void countsomething(int count_fish);void eat(int eat_num);//方法的重载 }; //子类 class Fish :public Animal { public:Fish(std::string name);//构造器void fishspeak();void countsomething(int count_fish);//覆盖方法 }; //Animal基类构造器 Animal::Animal(std::string name) {this->name = name;this->color = "red"; } //Fish子类构造器 Fish::Fish(std::string name) :Animal(name)//使用的其实是基类的构造器 {this->name = name;this->color = "green"; } //基类方法 void Animal::eat() {std::cout << "我在Animal类,I am eating" << std::endl; } void Animal::countsomething(int count_fish) {std::cout << "我在Animal类,我正在数魔鬼鱼,一共" << count_fish << "条魔鬼鱼" << std::endl; } void Animal::eat(int eatnum)//方法的重载 {std::cout << "(我在Animal类重载)I am eating " << eatnum << " fishes" << std::endl; } //子类方法 void Fish::fishspeak() {std::cout << "我在Fish类,我会说话,我的名字叫" << this->name << ",我的颜色是" << this->color << std::endl;//此处this可省略 } void Fish::countsomething(int count_fish)//覆盖方法 {std::cout << "(我在Fish类覆盖)我正在数魔鬼鱼,一共" << count_fish << "条魔鬼鱼" << std::endl; } int main() {Animal animal1("IAmAnimal");//创建一个基类对象animal1Fish fish1("MoGuiYu");//创建一个子类对象fish1,其name属性为MoGuiYufish1.fishspeak();//子类自己的函数fish1.countsomething(256);//子类继承的函数fish1.eat();//子类继承的函数std::cout << std::endl;animal1.eat(2);//重载的方法//重载只能在同一类中。不能对从基类继承来的方法进行重载,基类中重载的方法可以在子类中调用fish1.eat(3);//重载的方法在子类中也能调用std::cout << std::endl;std::cout << "基类对象animal1" << std::endl;std::cout << "名称:" << animal1.name << std::endl;std::cout << "颜色:" << animal1.color << std::endl << std::endl;std::cout << "子类对象fish1" << std::endl;std::cout << "名称:" << fish1.name << std::endl;std::cout << "颜色:" << fish1.color << std::endl << std::endl;system("pause"); }

总结

以上是生活随笔为你收集整理的C++ 覆盖方法、重载方法的理解的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。