#include<iostream>
#include<string>
using namespace std;
class Animal
{
public:
Animal(){ cout << "Animal virtual constructor" << endl; }
virtual~Animal(){ cout << "Animal constructor" << endl; }//virtual destructor ---solve father release object of son
virtual ~Animal() = 0;//pure virtual destructor but there is only declaration,while (virtual) destructor whether pure or not need to realize
virtual void speak() = 0;//pure virtual function
};
Animal::~Animal()//destructor relize by code where can add the release of sth father father father new in heap
{
cout << "pure virtual destructor" << endl;
}
class Cat :public Animal
{
string* namep;
public:
void speak()
{
cout << *namep << "cat is speaking" << endl;
}
Cat(string a)
{
cout << "Cat constructor" << endl;
namep=new string(a);
}
~Cat()
{
if (namep != NULL)
{
cout << "Cat destructor" << endl;
delete namep;
namep = NULL;
}
}
};
void f0()
{
Animal* p = new Cat("Tom");
p->speak();//father pointer don't use destructor of son when destruct---son have sth new in heap,then memory leak
delete p;
}
int main()
{
f0();
system("pause");
}