覆盖方法(overriding)

什么是类函数的覆盖方法:
覆盖方法用于同一函数的重写派生类函数覆盖基类同名函数
覆盖方法重写(覆盖)了一个方法,以实现不同的功能.一般是用于子类在继承父类时,重写(重新实现)父类中的方法

覆盖方法的特征:

范围不同(分别位于 基类 和 派生类中)
函数名字相同
函数参数相同
基类函数必须有virtual(虚函数)关键字

为什么需要覆盖方法:
在 C++ 里,当我们需要在 基类里提供一个通用的函数,但是在它的某个子类里,需要修改这个方法(通用函数)的实现,就要用到覆盖方法
当父类中的某些方法不能满足要求时,子类中改写父类的方法

注意:
1.重写方法的 参数列表(方法名称,参数列表,返回类型)必须完全与被重写的方法相同否则不能称其为覆盖而是 重载
2.重写方法的 访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)
3.重写的方法的返回值必须和被重写的方法的返回一致
3.被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写
5.静态方法不能被重写为非静态的方法(会编译出错)


覆盖方法例程

#include <iostream>
#include <string>using namespace std;//todo覆盖方法class Animal
{public:Animal(string name);void eat();//基类中的eat()方法 因为monkey和turtle都具有eat的功能 所有选择此方法为被覆盖重写的通用方法void sleep();void run();
protected:string thename;
};class Monkey :public Animal//todo建立一个继承自Animal基类的子类Monkey
{public:Monkey(string name);void climb();void eat();//todo再一次声明基类中的通用函数eat() //注意: 重写方法的参数列表必须完全与被重写的方法相同 否则不能称其为 覆盖 而是 重载//         重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)//           重写的方法的返回值必须和被重写的方法的返回一致//           被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写//            静态方法不能被重写为非静态的方法(会编译出错)};class Turtle :public Animal
{public:Turtle(string name);void swim();void eat();
};//todo基类Animal的构造器定义与成员函数定义
Animal::Animal(string name)
{   thename = name;
}void Animal::eat()//todo基类中的通用方法eat的定义
{cout << "基类中状态 :吃东西" << endl;
}void Animal::sleep()
{cout << "基类中状态 :睡觉" << endl;
}void Animal::run()
{cout << "基类中状态 :跑动" << endl;
}//todo子类Monkey的构造器定义与成员函数定义
Monkey::Monkey(string name) :Animal(name)
{}void Monkey::climb()
{cout << "子类中monkey状态 :爬树" << endl;
}void Monkey::eat()//todo继承基类Animal后的子类Monkey的 通用函数eat通用方法的覆盖
{Animal::eat();cout << "覆盖后monkey的eat状态 :'我在吃香蕉' " << endl;
}//todo子类Turtle的构造器定义与成员函数定义
Turtle::Turtle(string name) :Animal(name)
{}void Turtle::swim()
{cout << "子类中Turtle状态 :游泳" << endl;
}void Turtle::eat()
{Animal::eat();cout << "覆盖后turtle的eat状态 :'我在吃水草' " << endl;
}int main()
{   Monkey monkey("小猪猪");Turtle turtle("小甲鱼");//todo调用覆盖方法monkey.eat();turtle.eat();monkey.climb();turtle.swim();return 0;
}

结果


重载方法(overload)

什么是类函数的重载方法:

对于类的方法(包括从父类中继承的方法), 方法名相同,参数列表不同的方法之间就构成了重载关系 ,这里有两个问题需要注意

1.参数列表又叫参数签名,指三样东西: 参数的类型,参数的个数,参数的顺序 ,这三者只要有一个不同就叫做参数列表不同

2.重载关系只能发生在同一个类中吗?非也,这时候你要深刻理解继承,要知道一个子类所拥有的成员除了自己显式写出来的以外,还有父类遗传下来的,所以子类中的某个方法和父类中继承下来的方法也可以发生重载的关系

为什么需要重载方法:

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

注意:

C++ 覆盖方法与重载方法相关推荐

  1. 重写方法,重载方法,虚方法和抽象方法的使用

    重写方法,重载方法,虚方法和抽象方法. 重写:指子类重新实现父类的某些方法,以实现一些新的功能.重写的关键字是override.并且重写的方法其签名是相同的. 重载:指允许类中具有相同函数名的方法,但 ...

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

    辨析 覆盖 如何覆盖?覆盖就是将基类的方法,在子类重新声明一次,然后再改写一下它的实现代码. 名称.参数.返回值都必须与原方法相同 重载 重载,是同一类中,方法名相同,参数列表不同的一组方法的定义. ...

  3. 七:面向对象-->方法和重载方法

    目录 7.1.对象数组 案例1: 7.2. 构造方法 7.2.1.无参构造方法 7.2.2. 有参构造方法 7.3.方法重载 7.1.对象数组 对象数组的数据类型就是具体的类名,对象数组存储的就是这个 ...

  4. 方法功能从无参方法、含参方法到重载方法

    时间紧张,先记一笔,后续优化与完善. 一.无参方法 a.无参方法法语: 访问修饰符> 返回类型 <方法名>(){ //方法的体主 } b.义定 什么是无参方法?所谓无参方法即形如,诸 ...

  5. java方法的重载与覆盖的返回值类型

    public class A extends B{//下面的是方法的覆盖(重写overRiding)public void riding(){System.out.println("this ...

  6. 方法的重载与重写区别

    重写和重载的区别 (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2) Jav ...

  7. 在java中方法重载的要求,Java方法的重载

    Java方法的重载 方法重载:在类中方法名称相同,但是形式参数不同 public class Demo15 { public static void main(String[] args) { int ...

  8. 构造方法和方法的重载。

    ---恢复内容开始--- 构造器,又称为构造方法.constructor 构造器用于构造该类的实例. 格式: [修饰符] 类名(形参列表){ //n条语句 } 是一种特殊的方法: 1.通过new关键字 ...

  9. 【JavaSE05】Java中方法与重载、递归

    1.方法的声明和调用 什么是方法?为什么需要方法?代码复用,方便软件升级 什么是方法? 具备特定功能的一段独立的代码段 标准的方法格式:(注意格式的顺序) 修饰符 返回值类型 方法名(参数类型 参数名 ...

最新文章

  1. 剑指offer:求1+2+3+...+n
  2. 智能车竞赛,AI视觉组赛题浅析
  3. Yii中缓存依赖的处理
  4. Linux提权CVE-2022-0847分析
  5. boost::mpi::wait_all相关用法的测试程序
  6. android 常用渐变背景绘制
  7. 这个拖后腿的“in”
  8. Linux下 sshd服务不能启动
  9. selenium自动化测试-1.selenium介绍及环境安装
  10. Webstorm 下的Angular2.0开发之路
  11. windows系统生成tar
  12. Linux下添加删除查看用户操作
  13. 怎么打散铺铜_怎么做绵软香甜的黑米糕,不加酵母,加鸡蛋和一碗黑米粉一搅拌...
  14. 吐血推荐|2万字总结Mac所有应用程序、软件工具和相关资料
  15. 如何把iphone 6s通讯录导入到诺基亚E72i内
  16. canvas书写图片并修改尺寸
  17. PS常用快捷键 初学者必看
  18. 完美卸载mac电脑里的软件及残留清理教程
  19. iOS最全打包IPA教程
  20. Android SDK介绍

热门文章

  1. Echarts安装失败
  2. 从应用调用vivi驱动分析v4l2 -- 申请缓存(VIDIOC_REQBUFS)
  3. 【opencv机器学习】基于SVM和神经网络的车牌识别
  4. 计算机的存储器(详解)
  5. 脱粉之后,华为的喜忧参半
  6. 【java】微信文章抓取
  7. 用easywechat插件做微信支付
  8. Vue2Editor 中文API
  9. 2018年Github上值得学习的十个热门项目
  10. datawindow技巧