C++多态之包含多态

C++中的多态是一个重要的内容,多态分为四类:重载多态,强制多态,包含多态,参数多态!其中重载多态,强制多态这两种又被称为专用多态,而包含多态,参数多态这两种多态被称为通用多态!

多态从实现的角度来说分为两类:编译时的多态和运行时的多态。

这次主要研究了通用多态中的包含多态!

说到包含多态,则虚函数就是不可或缺的主角了,虚函数是动态绑定的基础,什么是绑定呢?确定操作的具体对象的过程就是绑定,按照绑定进行的阶段不同又分为静态绑定(绑定过程出现在编译阶段,用对象名或者类名来限定要调用的函数)和动态绑定(绑定过程工作在程序运行时执行,在程序运行时才确定将要调用的函数)


虚函数必须为非静态的成员函数、PS:我想应该是因为虚函数是实现运行中的多态的吧,即动态绑定,所以应该为非静态成员函数。这里又想到一个知识点,友元函数为非成员函数!!


虚函数【例子 P317 例8-4】

一般虚函数成员声明:

      virtual  函数类型 函数名(形参表)

victual 只能出现在虚函数的原型声明中,不得出现在函数实现的时候,虚函数一般不声明为内联函数。具有继承性,基类中声明了虚函数,派生类中无论是否说明,同原型函数都自动为虚函数。
本质:不是重载声明而是覆盖。

调用方式:通过基类指针或引用,执行时会 根据指针指向的对象的类,决定调用哪个函数。


没有虚构造函数,只有虚析构函数!!!!!

虚析构函数【例子 P320 例8-5】

虚析构函数的声明为:

victual ~类名()

如果一个类的析构函数为虚函数,则派生出的子类的析构函数也为虚析构函数。


纯虚函数【例子:P323 例8-6】

是一个在基类中定义为虚函数,但它在该基类中没有定义具体的操作内容,要各派生类根据实际需要给出各自的定义

纯虚函数声明如下:

    virtual 类型 函数名(参数表)=0; 

PS:纯虚函数和空的虚函数不一样

   1,纯虚函数根本没有函数体                                  空的虚函数的函数体为空

   2,纯虚函数所在的类为抽象类,不能实例化         空的虚函数是可以实例化的

相同点:都可以派生出新的类,然后在新类中给出虚函数新的实现(可具有多态特征)


抽象类:带有纯虚函数的类        不能实例化


class  类名
 {
     virtual 类型 函数名(参数表)=0; 
                                                         //纯虚函数
     ...
}

注:

抽象类只能作为基类来使用。
不能声明抽象类的对象。
构造函数不能是虚函数,析构函数可以是虚函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值