当前位置: 首页 > 网络知识

C++快速入门 第十九讲:覆盖方法和重载方法

时间:2026-01-29 09:25:36

覆盖是指派生类函数覆盖基类函数(函数名字参数相同且基类函数必须有virtual关键字)

以上学习可知可以通过创建新的子类来重用现有的代码(继承)

当我们需要在基类里提供一个通用的函数,但在它的某个子类里需要修改这个方法的实现,覆盖(overriding)就可以做到。

实例1:覆盖应用

1 //级别 允许谁来访问 2 //public 任何代码 3 //protected 这个类本身和它的子类 4 //private 只有这个类本身 5 #include <iostream> 6 #include <string> 7 8 class Animal//定义Animal类 9 ; 21 Animal::Animal(std::string theName)//类Animal构造器函数 22 25 26 class Pig:public Animal//类Pig继承于类Animal 27 ; 33 Pig::Pig(std::string theName):Animal(theName)//类Pig的构造函数继承于类Animal的构造函数 34 37 38 class Turtle:public Animal//类Turtle继承于类Animal 39 ; 45 Turtle::Turtle(std::string theName):Animal(theName)//类Turtle的构造函数继承于类Animal的构造函数参数 46 49 50 void Animal::eat()//Animal类中的方法函数 51 54 void Animal::sleep() 55 58 void Animal::drool() 59 62 void Pig::climb()//类Pig中的climb方法函数 64 67 void Turtle::swim()//类Turtle中的swim方法函数 68 71 void Pig::eat()//重新声明eat方法 72 76 void Turtle::eat()//重新声明eat方法 77 81 82 83 int main() 84

重载机制使你可以定义多个同名的方法(函数),只是它们的输入参数必须不同。(因为编译器是依靠不同的输入参数来区分不同的方法)

实例2:重载应用

1 //级别 允许谁来访问 2 //public 任何代码 3 //protected 这个类本身和它的子类 4 //private 只有这个类本身 5 #include <iostream> 6 #include <string> 7 8 class Animal//定义Animal类 9 ; 22 Animal::Animal(std::string theName)//类Animal构造器函数 23 26 27 class Pig:public Animal//类Pig继承于类Animal 28 ; 33 Pig::Pig(std::string theName):Animal(theName)//类Pig的构造函数继承于类Animal的构造函数 34 37 38 class Turtle:public Animal//类Turtle继承于类Animal 39 ; 44 Turtle::Turtle(std::string theName):Animal(theName)//类Turtle的构造函数继承于类Animal的构造函数参数 45 48 49 void Animal::eat()//Animal类中的方法函数 50 53 void Animal::eat(int eatCount) 54 57 void Animal::sleep() 58 61 void Animal::drool() 62 65 66 void Pig::climb()//类Pig中的climb方法函数 67 70 void Turtle::swim()//类Turtle中的swim方法函数 71 74 75 int main() 76

在对方法进行覆盖(注意区分覆盖和重载)时,一定要看仔细,因为只要声明的输入参数和返回值与原来的不一致,你编写出来的就将是一个重载的方法而不是覆盖方法。

实例3:子类内声明重载

1 //级别 允许谁来访问 2 //public 任何代码 3 //protected 这个类本身和它的子类 4 //private 只有这个类本身 5 #include <iostream> 6 #include <string> 7 8 class Animal//定义Animal类,基类 9 ; 22 Animal::Animal(std::string theName)//类Animal构造器函数 23 26 27 class Pig:public Animal//类Pig继承于类Animal,子类 28 ; 34 Pig::Pig(std::string theName):Animal(theName)//类Pig的构造函数继承于类Animal的构造函数 35 38 39 class Turtle:public Animal//类Turtle继承于类Animal 40 ; 45 Turtle::Turtle(std::string theName):Animal(theName)//类Turtle的构造函数继承于类Animal的构造函数参数 46 49 50 void Animal::eat()//Animal类中的方法函数 51 54 55 void Animal::sleep() 56 59 void Animal::drool() 60 64 void Pig::climb()//类Pig中的climb方法函数 65 68 void Pig::eat(int eatCount) 69 72 73 void Turtle::swim()//类Turtle中的swim方法函数 74 77 78 int main() 79


上一篇:C++快速入门 第十讲:复杂的数据类型——指针和数组
下一篇:C++快速入门 第二讲:从一个小程序说起
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素