C++ 的多态性

C++ 的多态性分为类的多态性和函数的多态性

类的多态性---通过虚函数实现

1、如果基类中的函数f()没有virtual,在派生类中重写此函数,用派生类的指针 引用 a,去初始化基类的引用或指针b时,b 指向的函数依然是基类的函数(因为没有virtual 关键字在编译阶段就绑定了(早期绑定)),如果带有 virtual 关键字,b 指向的函数是派生类的函数地址(这是在执行时才确定的称为动态绑定)

2、C++ 的多态原理:在基类里函数加virtual,在派生类中重写此函数,那么运行时将根据对象的实际类型来调用相应的函数。如果对象是派生类就调用派生类的函数,如果对象是基类就调用基类的函数。

虚函数机制的实现原理:

每个类都有个虚函数表(该表是一个一维数组,在这个数组中存放每个虚函数的地址),每个类的对象都有一个虚函数指针。

1,编译器在编译时,发现此类有虚函数,就给此类定义一个虚表,那么他的派生类也都会建立一个续表(因为派生类包括基类的虚函数)

2、编译器为每个类的对象提供了一个虚拟指针,指向所属类的虚函数表,从而在调用虚函数时,就能够找到正确的函数。

3,虚表指针在何时初始化?在构造函数中进行虚表的创建和虚表指针的初始化。还记得构造函数的调用顺序吗,在构造子类对象时,要先调用父类的构造函数,此时编译器只“看到了”父类,并不知道后面是否后还有继承者,它初始化父类对象的虚表指针,该虚表指针指向父类的虚表。当执行子类的构造函数时,子类对象的虚表指针被初始化,指向自身的虚表。

函数的多态性:函数的多态性是指一个函数被定义成多个不同参数的函数,它们一般被存在头文件中,当你调用这个函数,针对不同的参数,就会调用不同的同名函数---通过函数的重载实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值