C++:重载、重写、重定义
C++ 重载、重写和重定义
重载:函数名相同,函数的参数个数、参数类型或参数顺序三者中必须至少有一种不同。函数返回值的类型可以相同,也可以不相同。发生在一个类内部。
重写:即覆盖,一般发生在子类和父类继承关系之间。子类重新定义父类中有相同名称和参数的虚函数。
重定义:即隐藏,子类重新定义父类中有相同名称的非虚函数 ( 参数相同 )
虚/非虚函数(参数不同),派生类的函数屏蔽了与其同名的基类函数。发生在继承中。
重写需要注意:
1、 被重写的函数不能是static的。必须是virtual的
2 、重写函数必须有相同的类型,名称和参数列表
3 、重写函数的访问修饰符可以不同。尽管virtual是private的,派生类中重写改写为public,protected也是可以的
重定义规则如下:
a 、如果派生类的函数和基类的函数同名,参数不同,此时,不管有无virtual,基类的函数被隐藏。
b 、如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有vitual关键字,此时,基类的函数被隐藏
(如果相同有virtual就是重写覆盖了)。
#include<iostream>using namespace std;class Animal
{
public:void func1(int tmp){cout << "I'm an animal -" << tmp << endl;}void func1(char *s)//函数的重载 {cout << s << endl;}virtual void func2(int tmp){cout << "I'm virtual animal -" << tmp << endl;}void func3(int tmp){cout << "I'm an animal -" << tmp << endl;}
};class Fish :public Animal
{
public:void func1()//函数的重定义 会隐藏父类{cout << "I'm a fish" << endl;}void func2(char *s)//函数的重定义 隐藏 {cout << s << endl;}void func2(int tmp)//函数的重写 覆盖{cout << "I'm a fish " << tmp << endl;}
};int main()
{Fish fi;Animal an;fi.func1();fi.func2("I'm a fish,too");fi.func2(2);fi.func3(3);an.func1(1);an.func1("I'm an animal");an.func2(1);return 0;
}
C++:重载、重写、重定义相关推荐
- 第九天2017/04/18(3、重载/覆盖 PK 重写/重定义、父类子类混搭风、抽象类)
1.重载/覆盖 PK 重写/重定义 [预备知识] 函数重载必须在同一个类中发生子类无法重载父类的函数,父类同名的函数将会被名称覆盖重载是在编译期间根据参数类型和个数决定函数调用重载只放在同一个类之中, ...
- 重写重载与重定义的区别
1 成员函数重载特征: a 相同的范围(在同一个类中) b 函数名字相同 c 参数不同 d virtual关键字可有可无 2 重写(覆盖)是指派生类函数覆盖基类函数,特征是: ...
- 父子类之间,成员函数重写、重载以及重定义的区别
1.重写override:也叫做覆盖.子类重新定义父类中有相同名称和参数列表的虚函数.函数特征相同. 重写需要注意: 1) 被重写的函数不能是static的.必须是virtual的 2) 重写函数必须 ...
- 重载、重定义、虚函数
转自:http://www.cnblogs.com/j2eee/archive/2006/09/22/511954.html 函数重载 如何讲函数重载: What--函数重载是什么? why--为什么 ...
- c++ 重载、重写、重定义(隐藏)
1.重载overload:函数名相同,参数列表不同. 重载只是在类的内部存在,或者同为全局范围.(同名,同参函数返回值不同时,会编译出错.因为系统无法知晓你到底要调用哪一个.) 2.重写overrid ...
- C++中的覆盖(重写)、重载、隐藏(重定义)、多态!
例一: 首先声明Base类型的指针指向实际类型为Derived的对象,先调用基类构造函数,再调用派生类构造函数.输出Base, Derived. base->echo(); 指针是base类型, ...
- c语言 方法重载 冲定义,C++ 重载(overload)、重写(overrride)、重定义(redefine)
今天参加了一个面试,问到了上面的C++知识点,都知道,时间久了难免遗忘,感觉回答的一般,不够专业,部分点还答错了,sigh!在此再补漏下. 注意:这些都是C++语言的特性,C语言连最简单的重载(ove ...
- c++中的多态---1(多态概念,静态联编和动态联编,多态原理解析,重载,重写,重定义的对比)
多态的基本概念 多态是面向对象设计语言数据抽象和继承之外的第三个基本特征 多态性(polymorphism)提供接口与具体实现之间的另一层隔膜,从而将"what"和"ho ...
- 【校招面试 之 C/C++】第12题 C++ 重载、重写和重定义
1.成员函数重载特征: a.相同的范围(在同一个类中): b.函数名字相同: c.参数不同(参数个数不同或者参数类型不同,但是返回值不同不能使重载): d.virtual关键字可有可无. 2.重 ...
- C++ 重载(overload)、重写(overrride)、重定义(redefine)总结
昨晚打开论坛,看到有朋友问了一个关于虚函数的问题,因为头太疼了,所以今天中午起床再看. 问题传送门:http://www.cppleyuan.com/viewthread.php?tid=7923 C ...
最新文章
- 在Oracle中IMP导入数据时,如何解决目标数据库字符不一致问题
- mysql 端口time_wait_TIME_WAIT状态全是3306解决办法
- Day 11: AeroGear 推送服务器:使应用的通知推送变得简单
- Express app.get 进行路由 Route 设置
- RPM 软件包默认的安装路径
- bootstarp 网格系统
- ARKit 和 ARCore剖析、结构、原理介绍
- EdrawMax思维导图,EdrawMax组织结构图
- python视频转图片
- 悉尼大学计算机approved,悉尼大学Bachelor of Medical Science介绍
- 阿里云服务器搬迁记录(2021年3月)
- 若依后台实现表连接查询显示,一对一查询
- 数据中心机房设备标签规范建议
- 汉字转拼音之Jpinyin 简单使用
- Gazebo模型制作dae
- vsCode html文件格式化
- 华为HCIP认证对于大学生有没有用?毕业后有帮助吗?
- 【最新款】编程语言2月排行榜结果出炉:最难的语言实至名归!
- 2020江苏选调考察体检环节的记录
- webpack打包优化配置