//如果基类析构函数不是虚析构函数,派生类的析构函数不会被调用
#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;
}