【C++的探索路15】多态与虚函数之高级篇

本部分是多态与虚函数主要内容的完结篇,这一部分将介绍虚析构函数以及纯虚函数和抽象类,结束本章后下一部分将为习题课的练习。

虚析构函数

为了担心说起来太抽象,先扔一个程序

#include<iostream>
using namespace std;
class CShape {
public:
	~CShape() {
		cout << "CShape::destructor" << endl;
	}
};
class CRectangle :public CShape {
public:
	int w, h;
	~CRectangle() {
		cout << "CRectangle::destructor" << endl;
	}
};

int main()
{
	CShape*p = new CRectangle;
	delete p;
    return 0;
}

该程序中共有两个类,CShape类以及CRectangle类,CRectangle类由CShape类派生而来;在主程序中new出一块CRectangle的空间并赋值给CShape指针,并随后通过delete回收内存。

这是打印结果

程序运行似乎正确,内心没有一点波澜,However, Too young , too simple~

我们new的是一个CRectangle的空间,虽然最终通过CShape进行了调用,但只回收了CShape的内存空间,还有一部分内存空间并没有收回!

这个时候的解决办法就是:给析构函数加上virtual关键字!

然后就可以愉快的玩耍了

此外,构造函数是不能成为虚构造函数的

在这里总结一下


纯虚函数以及抽象类

纯虚函数,听名字就很虚;也就是没有函数体的虚函数。包含纯虚函数的类称为抽象类,由于抽象类包含了一个这么虚的函数,因此是不能有这么一个独立的对象,比如

独立的抽象类的对象不存在,但是包含在派生类对象中的抽象类的对象是可以存在的。

如果一个类从抽象类派生而来,那么当且仅当他对基类中的所有纯虚函数都进行覆盖,并写了函数体,它才能成为非抽象类





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值