论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
物联网
›
物联网
›
C++的多态
C++的多态
耶耶耶耶耶
金牌会员
|
昨天 07:17
|
显示全部楼层
|
阅读模式
楼主
主题
858
|
帖子
858
|
积分
2574
多态的界说及实现
多态的构成
多态的概念:去完成同一种行为,不同的对象完成时会产生不同的状态。
多态是通过继承和虚函数来实现的,具有两个条件:
必须通过基类的指针或者引用调用虚函数;
派生类必须对基类的虚函数举行重写,包管被调用的函数是虚函数。
虚函数及重写
虚函数:被 virtual修饰的类成员函数称为虚函数。
(虚函数和假造继承只是用到了同一个关键字 virtual,两者之间没有任何关系)
虚函数的重写:
派生类中有一个跟基类完全相同的虚函数(派生类虚函数和基类虚函数的返回值类型、函数名、参数列表都相同),只有函数体内的行为不同,称为子类的虚函数重写了基类的虚函数。
虚函数重写的两个例外:
协变(基类与派生类虚函数返回值类型不同)
即:基类虚函数返回基类对象的指针或引用,派生类虚函数返回派生类对象的指针或引用时,称为协变。
析构函数的重写
可以明白为编译器对析构函数的名称做了特殊处置惩罚,编译后析构函数的名称统一处置惩罚成destructor。
final和override
final关键字:
修饰类:当final用于修饰类时,表示该类不能被其他类继承。
class Base final {
public:
virtual void func() {
// ...
}
};
class Derived : public Base { // 报错:不能将final类作为基类
public:
void func() {
// ...
}
};
复制代码
修饰成员函数:当final用于修饰成员函数时,表示该函数不能在派生类中被重写。
class Base {
public:
virtual void func() final {
// ...
}
};
class Derived : public Base {
public:
void func() { // 报错:无法覆盖final函数
// ...
}
};
复制代码
override关键字:
检查派生类虚函数是否重写了基类的某个虚函数,假如没有重写编译报错。(用在派生类虚函数上)
class Base {
public:
virtual void func() {
// ...
}
};
class Derived : public Base {
public:
void func() override { // 覆盖了基类中的func函数,若没覆盖则报错
// ...
}
};
复制代码
抽象类
在虚函数的后面写上 =0,则这个函数为纯虚函数。
包含纯虚函数的类叫做抽象类(接口类),抽象类不能实例化出对象。
派生类继承后也不能实例化出对象,只有重写纯虚函数厚才可以实例化出对象。
多态的原理
构成多态后,派生类对于虚函数的调用 实在是:函数体的更换。(函数返回值、函数名和参数列表都是基类的虚函数的,函数体更换成派生类的)
虚函数表
含有虚函数的类天生的对象中都至少有一个虚函数表指针_vfptr,指向虚函数表(编译阶段天生的),这个表中存储了该类所有虚函数的地址。
虚函数重写后子类会用重写后的函数体地址覆盖虚表内父类虚函数函数体的地址。
class Base
{
public:
virtual void Func1()
{
cout << "Func1()" << endl;
}
private:
int _b = 1;
};
复制代码
派生类内虚表的明白:
派生类的虚表不是单独产生的,是从基类拷贝了一份,假如有虚函数重写或新加了虚函数才会对继承的虚表举行修改。
假如是多继承,就会有多个虚指针和多个虚表,每个被继承的父类在子类内都是一个团体。(继承两个父类,有两个虚指针和两个虚表;继承三个父类,就有三个虚指针和虚表……)
多继承的子类新添加的虚函数,会被加到继承的第一张虚表的最后。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
耶耶耶耶耶
金牌会员
这个人很懒什么都没写!
楼主热帖
为什么你应该停止依赖Jenkins的插件? ...
集合论第6-8章
蜻蜓优化算法(Matlab完整代码实现) ...
腾讯云多媒体文件处理总结
axios&spring前后端分离传参规范总结 ...
SQL 教程之 10 个 SQL 操作用于 80% 的 ...
Python知识点(史上最全)
JVM常用调优配置参数
20220319编译OpenHarmony-v3.1-beta出 ...
计算机的存储容量单位
标签云
挺好的
服务器
快速回复
返回顶部
返回列表