【C++】重定义,重载,重写
重载
同一个作用域内,方法名相同而参数不同的几个方法。
class AA
{
public:void print(){cout << "父类" << endl;}void print(int x ){cout << "父类:" << x << endl;}
};
重写
函数特征相同。但是具体实现不同,主要是在类继承关系中出现的 。当我们对别人提供好的类的方法感觉不是太满意时,我们就可以通过继承这个类然后重写其方法改成我们需要的逻辑。
1、最重要的一点,重写是子类与父类之间的。
2、被重写的函数不能是 static 的。
3、函数三要素(函数名、函数参数、函数返回类型)完全一样。
4、如果父类中有virtual关键字,这种父子之间的关系叫做虚函数重写,这也就是C++中的多态机制。
class AA
{
public:virtual void print(int x ){cout << "父类:" << x << endl;}
};class BB : public AA
{
public:virtual void print(int x){cout << "子类:" << x << endl;}
};int main()
{AA *p = NULL;BB b; p = &b;p->print(1);
}
重定义
重定义 (redefining)也叫做隐藏:
子类重新定义父类中有相同名称的非虚函数 ( 参数列表可以不同 ) 。
class AA
{
public:void print(){cout << "父类" << endl;}
};
class BB : public AA
{
public:void print(int x)//这叫重定义,此时A类中的print()被隐藏{cout << "子类:" << x << endl;}
};void main()
{int x = 1;BB b; //子类AA a; //父类a.print();//访问父类的print()b.print(x);//访问子类的print()b.AA::print();//访问父类的print()//b.print();error:函数参数太少
}
这种情况下print()和print(int x)叫作重定义,在重定义时,父类的print()方法被隐藏了,要想使用父类的方法必须通过::。
关于重定义补充一点:由于在同一个作用域内,C++不允许出现相同命名的函数或变量,所以如果你出现了重复,就会报重定义错误。
【C++】重定义,重载,重写相关推荐
- 第九天2017/04/18(3、重载/覆盖 PK 重写/重定义、父类子类混搭风、抽象类)
1.重载/覆盖 PK 重写/重定义 [预备知识] 函数重载必须在同一个类中发生子类无法重载父类的函数,父类同名的函数将会被名称覆盖重载是在编译期间根据参数类型和个数决定函数调用重载只放在同一个类之中, ...
- 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 ...
- 初识C++之函数重载、重写、重定义的区别
在C++的学习中,慢慢接触了一些很容易混淆的名词,今天就来剖析几个容易混淆的名词. 1.函数重载 重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同 ...
- 重写重载与重定义的区别
1 成员函数重载特征: a 相同的范围(在同一个类中) b 函数名字相同 c 参数不同 d virtual关键字可有可无 2 重写(覆盖)是指派生类函数覆盖基类函数,特征是: ...
- 父子类之间,成员函数重写、重载以及重定义的区别
1.重写override:也叫做覆盖.子类重新定义父类中有相同名称和参数列表的虚函数.函数特征相同. 重写需要注意: 1) 被重写的函数不能是static的.必须是virtual的 2) 重写函数必须 ...
最新文章
- CentOS7关闭防火墙
- 程序员也需要工匠精神
- 智源学术顾问David Harel:经典建模与AI的联姻,如何攻破机器学习的可解释性?| 大师讲座...
- 计算机三级网络技术查漏补缺
- 服务器手工修改虚拟内存,服务器修改虚拟内存
- css响应式布局_Web前端新手怎么入门 如何用CSS做响应式布局
- COM_TEXT_GET_SWITCH
- python怎么对文件行排序_使用Python对文本文件进行排序
- php生成excel到服务器,yii phpexcel自动生成文件保存到服务器上
- ESXI6.7虚拟机配置LACP静态汇聚端口网络负载均衡分流
- mysql 廖雪峰_讨论 - 廖雪峰的官方网站
- 编译原理完整学习笔记(八):目标代码生成
- 数据可视化方向的毕业设计详细思路
- 01数组寻找通路c语言,迷宫算法 之 迷宫生成和迷宫寻路
- php经典实例读后感,读卡耐基《人性的弱点》章节之读后感
- pycharm 自定义区域折叠代码
- 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java社区闲置物品交易平台z10mc
- 单链表就地逆置(Java版)
- 如何衡量和提高推荐计划的投资回报率
- 在ubuntu16.04下,使用unrar解压缩rar文件