C++的探索路15多态与虚函数之高级篇
Posted Guerrouj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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关键字!
然后就可以愉快的玩耍了
此外,构造函数是不能成为虚构造函数的
在这里总结一下
纯虚函数以及抽象类
纯虚函数,听名字就很虚;也就是没有函数体的虚函数。包含纯虚函数的类称为抽象类,由于抽象类包含了一个这么虚的函数,因此是不能有这么一个独立的对象,比如
独立的抽象类的对象不存在,但是包含在派生类对象中的抽象类的对象是可以存在的。
如果一个类从抽象类派生而来,那么当且仅当他对基类中的所有纯虚函数都进行覆盖,并写了函数体,它才能成为非抽象类。
以上是关于C++的探索路15多态与虚函数之高级篇的主要内容,如果未能解决你的问题,请参考以下文章