c++中的重载,重写,重定义
来源:互联网 发布:mysql over 函数 编辑:程序博客网 时间:2024/06/06 04:47
c++中的几个容易混淆的概念:
(1)重载:在同一作用域中,函数名相同,参数列表不同,返回值可同可不同的函数。
关于函数重载的知识在《函数重载》这篇博客中有详细介绍。
(2)重写:又叫覆盖,是指不在同一个作用域中(分别在父类和子类中),函数名,
参数个数,参数类型,返回值类型都相同,并且父类函数必须有virtual关键字的函数,
就构成了重写(协变除外)。
协变:协变也是一种重写,只是父类和子类中的函数的返回值不同,父类的函数返回父
类的指针或者引用,子类函数返回子类的指针或者引用。
下边看个例子:
class B{public:B():_num(1){}virtual void Show(){cout << _num << endl;}protected:int _num;};class D :public B{public:D():_num(2){}virtual void Show(){cout << _num << endl;}protected:int _num;};int main(){D d;d.Show();cout << sizeof(d) << endl;system("pause");return 0;}
这段程序中,Show函数和_num成员都被重写了,调用d的Show函数打印2.sizeof(d)
的结果是12.没错,就是12.父类的Show函数被子类的Show函数覆盖,_num只是被隐藏
了(下边介绍),但是仍然存在,另外内存中还会存在一个虚函数表的指针,存放虚函
数的地址,通过查看虚函数表可以发现,表中只会存放子类Show函数的地址,说明父类
的Show函数被覆盖。如下图:
(3)重定义:又叫隐藏,是指在不同的作用域中(分别在父类和子类中),函数名相
同,不能构成重写的都是重定义(重定义的不光是函数,还可以是成员变量)。上例中
的_num成员就构成了重定义(子类中仍然存在),这里就不再给出实例。
阅读全文
0 0
- C++中的的重写,重载,重定义
- 区分C++中的重载,重写,重定义
- C++中的重载,重写, 重定义 差别
- c++中的重载,重写,重定义
- C++中的重载重写与重定义
- c++中的重载,重写,重定义
- C++中的重写、重载、重定义
- 重载、重写、重定义
- 重写,重载,重定义
- 重写重载重定义
- 重载重写重定义
- 重写 重载 重定义
- 重载重写重定义
- 重写,重载,重定义
- 重载,重写,重定义
- 重载重写重定义
- 重载、重写与重定义
- 关于重载、重写、重定义
- 51Nod
- 解决apt-get install E: 无法定位软件包问题
- linux insmod
- ASCII码字符表
- Servlet的过滤器与Spring拦截器详解
- c++中的重载,重写,重定义
- 史上最全的maven pom.xml文件教程详解
- 上海云栖—人工智能-视觉计算专场预热
- Kotlin 学习笔记(1)基本语法
- Java Swing 树状组件JTree的使用方法【图】
- Android6.0源码分析之蓝牙
- 冲突杀手meld -- git使用meld作为对比或合并工具_zhou
- hive和hbase的关系
- HTML5游戏开发 Chapter01 基础知识与Processing.js