想要用好C++继承和类自身函数实现就必须了解C++得三个概念重定义(redefine)、重载(overload)、重写(override)。
一、 基本感念
1、 重定义(redefine)
派生类对基类函数得重定义,派生类函数名与基类某函数同名。
特点:
(1)作用域不同,既一个在基类一个在子类中;
(2)函数名相同;
(3)参数列表、函数返回值无要求;
特殊情况:若派生类定义的函数与基类的成员函数完全一样(名字、参数列表、返回值),且基类的该函数为virtual,则属于派生类重写基类的虚函数。
C++之重定义、重载与重写2、 重载(overload)
函数名相同,参数列表不同(参数类型、参数顺序),不能用返回值区分。
特点:
(1)作用域相同;
(2)函数名相同;
(3)参数列表必须不同,但返回值无要求;
特殊情况:若某一重载版本的函数前面有virtual关键字修饰,则表示它是虚函数,但它也是重载的一个版本。
作用效果:编译器根据函数不同的参数列表,将函数与函数调用进行早绑定,重载与多态无关,与面向对象无关,它只是一种语言特性。
3 、覆盖(override)
派生类重定义基类的虚函数,既会覆盖基类的虚函数(多态)。
特点:
(1)作用域不同;
(2)函数名、参数列表、返回值相同;
(3)基类函数是virtual;
特殊情况:若派生类重写函数是一个重载版本,那么基类的其他同名重载函数将在子类中隐藏。
作用效果:父类指针和引用指向子类的实例时,通过父类指针或引用可以调用子类的函数,这就是C++的多态。
二、 代码实例
三个类,一个基类,两个派生类,类定义和实现如下:
View Code
测试主程序:
View Code
详细的分析如注释。运行结果如下:
C++之重定义、重载与重写三、C++学习交流
小编推荐 :C/C++学习交流裙:七一零五二零三八一 (编号:灵狐 ,不填不会通过哦)
不定时分享干货,包括2018最新的C/C++企业案例学习资料和零基础入门教程,欢迎自学的小白和大神一起来学习交流。
四、 在C++11中可以指定不隐藏基类函数
在C++11中层架 了using的用法可以在子类中指定不隐藏基类的函数。
五、隐藏规则
隐藏规则如下:
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。 (2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。
网友评论