博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【C++】四、重载,重写,重定义
阅读量:2380 次
发布时间:2019-05-10

本文共 1064 字,大约阅读时间需要 3 分钟。

文章目录

1 重载

1.1 定义

重载指的是在同一个作用域内,两函数的函数名可以相同,但是参数不能完全相同,可以是参数类型不同或者是参数个数不同,至于返回值,不影响重载。

1.2 代码解析

//1、函数重载从底层上来说,还是两个不同的函数!//函数会被编译成_test_int_intint test(int a,int b){
return 0; }//a//函数会被编译成_test_int_doubleint test(int a,double b){
return 0;}//b//2、返回值类型不同不可以构成重载void test(int a,int b){
}//c 会报错,与a函数相同int main(){
test(1,1); test(1,2.2);}

2 重写

2.1 定义

重写指的在继承关系中,子类中定义了一个与父类极其相似的虚函数。

具体怎么相似:函数名必须相同,参数列表必须相同,返回值可以不相同,但是必须是父子关系的指针或引用。

2.2 应用

通过重写,可以实现动态多态,如果去掉父类的虚函数的virtual,则构不成多态,如果去掉子类虚函数的virtual可以构成多态,可以理解为编译器优化。

3 重定义

3.1 定义

重定义也叫隐藏,指的是在继承关系中,子类实现了一个和父类名字一样的函数,(只关注函数名,和参数与返回值无关)这样的话子类的函数就把父类的同名函数隐藏了。

a)如果派生类的函数和基类的函数同名,但是参数不同,此时,不管有无virtual,基类的函数被隐藏。

b)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有vitual关键字,此时,基类的函数被隐藏。(如果有virtual就成重写了)

4 重载重定义与重写

下面的代码有点绕,不过理解了,你就通透了

#include 
using namespace std;class Base{
private: virtual void display() {
cout<<"Base display()"<
exec();//display()是ClassA的,因为【重写】 ,show()是Base自己的【理解重写与重定义的不同】 cout<<"1========="<
fun(1);//fun()是Base自己的,因为直接从对象base调用 cout<<"4========="<

转载地址:http://qvmxb.baihongyu.com/

你可能感兴趣的文章
matlab基础操作查漏补缺
查看>>
自定义BP神经网络参数
查看>>
灵活的string类与istringstream的联合使用
查看>>
高斯信道下信号相位估计
查看>>
C++中可变参函数的几种实现方法
查看>>
C++中使用vector动态创建多维数组
查看>>
进程join和detach注意事项
查看>>
C++原子操作atomic库介绍
查看>>
C++多线程内存模型
查看>>
C++并发数据结构的内存回收
查看>>
转发与重定向
查看>>
隐式对象简介(转载)
查看>>
使用了request.setCharacterEncoding()方法却解决不了中文乱码原因(转载)
查看>>
读取Properties文件读取,路径,空格,中文问题
查看>>
转发与重定向的路径问题(转)
查看>>
Integer.parseInt(s) 和 Integer.valueOf(s)详细区别(转)
查看>>
Cookie 跨域访问转自(http://qingfeng825.javaeye.com/)
查看>>
深入Java核心 Java内存分配原理精讲(转)
查看>>
全面分析Java的垃圾回收机制(转)
查看>>
Struts 与 dojo 整合研究 (一)
查看>>