C++:虚析构和纯虚析构

C++:虚析构和纯虚析构

一、虚析构 - 若子类中存在指向堆区的属性,须利用虚析构技术(将父类析构函数写成虚函数),在delete时,才会调用子类的析构函数。

#include 
#include 
using namespace std;

class Animal
{
public:
    Animal()
	{
		cout<<"Animal默认构造函数调用"<name = new char[strlen(name)+1];
		strcpy(this->name, name);
	}
	
	~Cat()
    {
		cout<<"Cat析构函数调用"<name)
		{
			delete[] this->name;
			this->name = NULL;
		}
	}
    
	void speak()
	{
		cout<name<<" 小猫在说话"<speak();
	delete animal;
	animal = NULL;
}

int main()
{
	doSpeak(new Cat("小黑"));
	return 0;
}

二、纯虚析构 - 既要有声明,也须有定义;类内声明,类外定义。

#include 
#include 
using namespace std;

// 存在纯虚析构和虚析构函数,该类为抽象类,不能进行实例化操作
class Animal
{
public:
    Animal()
	{
		cout<<"Animal默认构造函数调用"<name = new char[strlen(name)+1];
		strcpy(this->name, name);
	}
	
	~Cat()
    {
		cout<<"Cat析构函数调用"<name)
		{
			delete[] this->name;
			this->name = NULL;
		}
	}
    
	void speak()
	{
		cout<name<<" 小猫在说话"<speak();
	delete animal;
	animal = NULL;
}

int main()
{
	doSpeak(new Cat("小黑"));
	return 0;
}

 

你可能感兴趣的:(C++入门,抽象类,多态)