天天看點

虛析構函數

//如果基類析構函數不是虛析構函數,派生類的析構函數不會被調用
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class Animal {
public:
	Animal(char *name);
	void print_name();
	virtual void print_color();
	virtual void speak();
	virtual ~Animal();
private:
	char *m_pAnimalName;
};
Animal::Animal(char *name)
{
	int len = strlen(name) + 1;
	m_pAnimalName = new char[len];
	strcpy(m_pAnimalName, name);
}
Animal::~Animal()
{
	cout << "animal desstrutor" << endl;
	if (m_pAnimalName)
		delete[] m_pAnimalName;
}
void Animal::print_name()
{
	cout << "name:" << m_pAnimalName << endl;
}
void Animal::print_color()
{

}
void Animal::speak()
{
	cout << "animal lauguage" << endl;
}
class Cat:public Animal {
public:
	Cat(char *name, char *catcolor);
	virtual void print_color();
	virtual void speak();
	virtual ~Cat();
	private:
		char *m_pCatColor;
};
Cat::Cat(char *name, char *catcolor) :Animal(name)
{
	cout << "cat constructor" << endl;
	m_pCatColor = new char[strlen(catcolor) + 1];
	strcpy(m_pCatColor, catcolor);
}
Cat::~Cat()
{
	cout << "cat desstuctor"<< endl;
	if (m_pCatColor)
		delete[] m_pCatColor;
}
void Cat::print_color()
{
	cout << "cat color:" << m_pCatColor << endl;
}
void Cat::speak()
{
	cout << "cat language miaomiao"<< endl;
}
int main()
{
	Animal *p[2];
	int i;
	p[0] = new Cat("short_haired_cat","white");
	p[0]->print_name();
	p[0]->print_color();
	p[0]->speak();
	p[1] = new Cat("persian_cat", "brown");
	p[1]->print_name();
	p[1]->print_color();
	for (int i = 0; i < 2; i++)
	{
		delete p[i];
}
	system("pause");
	return 0;
}


           

繼續閱讀