4.7.5虚析构和纯虚虚构
#include <iostream>
using namespace std;
#include<string>
class Animal
{
public:
Animal()
{
cout << "Animal" << endl;
}
virtual void speak() = 0;
virtual ~Animal()
{
cout << "~Animal" << endl;
}
};
class cat :public Animal
{
public:
cat(string name)
{
cout << "cat()" << endl;
m_name = new string(name);
}
virtual void speak()
{
cout << *m_name<<" cat speak" << endl;
}
string *m_name;
~cat()
{
if (m_name != NULL)
{
cout << "~cat()" << endl;
delete m_name;
m_name = NULL;
}
}
};
void test01()
{
Animal *ani = new cat("tom");
ani->speak();
delete ani;
}
int main4_7_5()
{
test01();
system("pause");
return 0;
}
4.7.4制作饮品
#include <iostream>
using namespace std;
class Abstr
{
public:
virtual void boil() = 0;
virtual void brew() = 0;
virtual void pour() = 0;
virtual void put() = 0;
void makeDrink()
{
boil();
brew();
pour();
put();
}
};
class coffee:public Abstr
{
public:
virtual void boil()
{
cout << "coffee注水" << endl;
}
virtual void brew()
{
cout << "coffee冲泡" << endl;
}
virtual void pour()
{
cout << "coffee倒入杯中" << endl;
}
virtual void put()
{
cout << "coffee放其他东西" << endl;
}
};
class tea :public Abstr
{
public:
virtual void boil()
{
cout << "tea注水" << endl;
}
virtual void brew()
{
cout << "tea冲泡" << endl;
}
virtual void pour()
{
cout << "tea倒入杯中" << endl;
}
virtual void put()
{
cout << "tea放其他东西" << endl;
}
};
void dowork(Abstr *abs)
{
abs->makeDrink();
delete abs;
}
void test01()
{
dowork(new coffee);
}
int main4_7_4()
{
test01();
system("pause");
return 0;
}