栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++基础-补漏日记5(继承,二义性,多态,纯虚,析构)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++基础-补漏日记5(继承,二义性,多态,纯虚,析构)

目录

继承

二义性

多继承

虚继承 

多态

地址早绑定和晚绑定

父类指针指向子类对象

纯虚函数与抽象类

 虚析构与纯虚析构


继承

继承方式

(1)protected子类可以访问父亲的保护内容。private子类不能访问父亲的私有成员。

(2)

(黑马up图)

 (3)继承中,构造先调用父类构造函数,在调用子类构造函数。析构先调用子类析构函数,在调用父类析构函数。和栈同。

 继承例子

包含子类构造、访问父类被隐藏的同名成员函数。

(4)

访问父类被隐藏的静态成员变量(类外初始化)

(5)

因为子类没有再次定义而报错?

 

访问父类被隐藏的静态成员变量同上一条

……

二义性

例子:吕布有两个爹,那过年过节准备回哪个爹的家呢?

问题:两个父类中有同样的属性,子类使用时要加作用域区分

解决方法1:加作用域

多继承:

虚继承 

菱形继承

        动物

    /             

羊                驼

                  /

        羊驼  

虚继承原理:羊驼类并不是继承了羊类和驼类的数据,而是他俩的指针,指针通过偏移量找到唯一的数据age。

多态

静态多态:函数重载,运算符重载

动态多态:派生类和虚函数

多态好处:1.组织结构清晰 2.可读性强 3.对于前期和后期的拓展 4.维护性高。

地址早绑定和晚绑定

(1)早绑定

 

没能实现输出猫说话

 (2)晚绑定,在父类的同名函数前加virtual,

实现了猫说话。

地址早绑定,在编译阶段进行了绑定。

实现地址晚绑定,在父类中+virtual,在运行阶段进行绑定。

父类指针指向子类对象

父类创建一个指针指向一个new的子类

纯虚函数与抽象类

只要有一个纯虚函数,这个类被定义为抽象类。

(1)纯虚函数会导致该类无法实例化对象。

(2)抽象类的子类必须重写纯虚函数,否则子类也属于抽象类。

 虚析构与纯虚析构

虚析构和纯虚析构实现通过父类指针释放子类对象


问题:“ani析构上一行缺少了cat析构”

原因:父类指针释放子类对象,可能导致子类对象清理不干净,造成内存泄漏

办法:将父类的析构函数设置为虚析构函数,

解决前↓

解决后↓

 


子类没有堆区,可以不写虚析构和纯虚析构。

(1)成员函数前面只加virtual,是防止二义性。

(2)加virtual弄成纯虚函数,是为了提醒自己的子类要重写这个函数。

(3)虚析构和纯虚析构实现通过父类指针释放子类对象

(4)拥有纯虚析构/纯虚函数的属于抽象类 【virtual 返回值类型 函数名()=0;】

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019696.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号