設計モード観後(c++還元リス置換原則)
このデザインモデルを買って、勉強を見てみましょう.以前のノートはgithubの上に置いてあったので、これはcsdnの上に置いておきましょう!毎日更新します!
//里氏置換原則1子類完全親を実現する方法2子類は独自の個性を持つことができる3親を実現する方法を上書きする際に入力パラメータを拡大することができる.
//里氏置換原則1子類完全親を実現する方法2子類は独自の個性を持つことができる3親を実現する方法を上書きする際に入力パラメータを拡大することができる.
// 、 、
class AbstractGun
{
public:
virtual void shoot() {
cout << "kill people!";
}
};
class HandGun : public AbstractGun
{
public:
virtual void shoot() {
cout << "handgun kill";
}
};
class Rifle : public AbstractGun
{
public:
virtual void shoot() {
cout << "rifle kill";
}
};
class MachineGun : public AbstractGun
{
public:
virtual void shoot() {
cout << "machinegun kill";
}
};
class Soldier
{
public:
void SetGun(AbstractGun* _gun) {
m_gun = _gun;
}
virtual void KillEnemy() {
m_gun->shoot();// , 。
}
virtual ~Soldier() {};
protected:
AbstractGun* m_gun;
};
// “ ” , , killenemy 。
// ,
// , 、 、 。
class ToyGun
{
public:
/......./
};
//
class AUG : public Rifle
{
public:
void zoomeout() {
cout << "observed enemy";
}
virtual void shoot() {
cout << "AUG kill";
}
};
// , , ( )
class Snipper : public Soldier
{
public:
virtual void KillEnemy() {
AUG* aug = static_cast(m_gun);
aug->zoomeout();
aug->shoot();
}
};
class Client
{
public:
// static, , 。
static void Action() {
Snipper* shibin = new Snipper;
shibin->SetGun(new AUG);
shibin->KillEnemy();//
}
};