虚析构和纯虚析构原理

虚析构和纯虚析构原理

直接上代码:请根据编号查看代码说明。

先总结:

  1. 虚析构或纯虚析构就是用来解决通过父类指针释放子类对象

  2. 如果子类中没有堆区数据,可以不写为虚析构或纯虚析构

  3. 拥有纯虚析构函数的类也属于抽象类

animal类

//3.
class animal
{
public:
	animal() { cout << "animal构造函数调用" << endl; }
    
	//能调用子类析构函数 来释放堆区的解决方法:
    
	//利用虚析构可以解决父类指针释放子类对象时不干净的问题
	//virtual ~animal() { cout << "animal虚析构函数调用" << endl; }

	//而如果想避免基类实例化,则可以将析构函数写成纯虚析构
	//但因为派生类(子类)不可能来实现基类(父类)的析构函数,
	//所以基类析构函数虽然可以标为纯虚,但是仍必须实现析构函数,
	//否则派生类无法继承,也无法编译通过。
    
	//纯虚析构 要声明也要实现(类外定义)
	//有了纯虚析构之后,这个类也属于抽象类,并无法实例化对象
	
	virtual  ~animal() = 0;
   
	virtual void speak() = 0; 
};

//纯虚析构函数要类外定义
animal::~animal() { cout << "animal纯虚析构函数调用" << endl; }

cat类,里面继承了父类anim

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值