【C++复习】第三弹之继承和多态

前言

继承和多态是C++语法设计的精髓,也是我们对代码进行优化,重构的好方法。继承主要是类层次的复用,多态就是不同对象的不同执行方法,在继承的前提下,对关系类的方法进行重写。

1.继承的问题?如何解决?

继承,在C++中,分为单继承和多继承,单进程很好理解,就是一个子类他只有一个父类。多继承就会产生一个大的问题就是菱形继承,引发的问题就是数据冗余和二义性。

 回答:主要问题是菱形继承的问题,一个派生有两个或多个基类,而这些基类有一个共同的基类,继承关系就是一个菱形。

二义性:子类有多个基类的同名成员变量,就会导致访问对象不清楚,需要显示去指定。

数据冗余:子类对象里面会有多分基类对象的数据。使用虚继承就可以继承一份计类的成员变量。

解决方法:,对象存放虚基表指针。引入虚基表,虚基表里面存放偏移量,通过+偏移量去找到基类变量的地址。

2.多态的原理?虚表?

前面的继承关系让我知道了,子类对象如何存储父类对象的。接下来的动态多态就是建立在这个基础上,对函数方法的复用。
在以后遇到的多态问题我们要记住构成多态的两个条件:

①必须通过基类的指针或者引用去调用虚函数。

②虚函数必须重写。

回答:多态分为静态的多态和动态的多态,静态的多态主要是通过函数名的修饰规则,去区分不同的函数,动态的多态就是在在继承关系下调用对象的操作方法,前提要求是在引入virtual的函数中,也就是重写了父类的虚函数。就会去调用指针或者引用的指向对象。如果不构成多态就会去调用指针 或者引用的类型,也就是其本身的对象类型和调用对象无关

这会儿还需要唠叨一句,所谓的动态,就是指我并不知道我的身份,我通过基类,也就是统一的底层方法去认证,找到我的虚函数地址,这个才是动态绑定也就是运行时多态的理解。思想也是类似于静态,我通过形参去调用一个函数名统一的方法类,基类的时候,我会去通过已经生成好了的函数名取调函数,而虚函数是通过基类的指针和引用去绑定类。然后调用虚表。多继承下会调用第一个找到的函数,也会有二义性问题,可以显示去调用或者虚继承解决。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值