CTurkeyAdapter到底是鸡还是鸭?
#include<iostream>
using namespace std;
class CDuck
{
public:
virtual ~CDuck(){}
virtual void Quack()=0;
virtual void Fly()=0;
};
class CMallardDuck:public CDuck
{
public:
void Quack()
{
cout<<"绿头鸭,呱呱叫。"<<endl;
}
void Fly()
{
cout<<"绿头鸭在飞行。"<<endl;
}
};
class CTurkey
{
public:
virtual ~CTurkey(){}
virtual void Gobble()=0;
virtual void Fly()=0;
};
class CWildTurkey:public CTurkey
{
public:
void Gobble()
{
cout<<"野生火鸡,咕咕叫"<<endl;
}
void Fly()
{
cout<<"野生火鸡飞行距离短"<<endl;
}
};
class CTurkeyAdapter:public CTurkey
{
public:
CTurkeyAdapter(CTurkey *pTurkey):m_pTurkey(pTurkey)
{
}
void Quack()
{
m_pTurkey->Gobble();
}
void Fly()
{
for (int i=0;i<5;i++)
{
m_pTurkey->Fly();
}
}
private:
CTurkey *m_pTurkey;
};
int main()
{
int nRetCode=0;
CDuck *pDuck=new CMallardDuck();
CTurkey *pTurkey=new CWildTurkey();
CTurkey *pAdapter=new CTurkeyAdapter(pTurkey);
cout<<"火鸡..."<<endl;
pTurkey->Gobble();
pTurkey->Fly();
cout<<"\n鸭子..."<<endl;
pDuck->Quack();
pDuck->Fly();
cout<<"\n火鸡适配器..."<<endl;
pAdapter->Quack();
pAdapter->Fly();
return nRetCode;
}
写成这样,报错:
/data/data/com.n0n3m4.droidc/files/temp.c: In function 'int main()':
/data/data/com.n0n3m4.droidc/files/temp.c:66:46: error: invalid new-expression of abstract class type 'CTurkeyAdapter'
CTurkey *pAdapter=new CTurkeyAdapter(pTurkey);
^
compilation terminated due to -Wfatal-errors.
写成下面这样就可以运行了:
#include<iostream>
using namespace std;
class CDuck
{
public:
virtual ~CDuck(){}
virtual void Quack()=0;
virtual void Fly()=0;
};
class CMallardDuck:public CDuck
{
public:
void Quack()
{
cout<<"绿头鸭,呱呱叫。"<<endl;
}
void Fly()
{
cout<<"绿头鸭在飞行。"<<endl;
}
};
class CTurkey
{
public:
virtual ~CTurkey(){}
virtual void Gobble()=0;
virtual void Fly()=0;
};
class CWildTurkey:public CTurkey
{
public:
void Gobble()
{
cout<<"野生火鸡,咕咕叫"<<endl;
}
void Fly()
{
cout<<"野生火鸡飞行距离短"<<endl;
}
};
class CTurkeyAdapter:public CDuck
{
public:
CTurkeyAdapter(CTurkey *pTurkey):m_pTurkey(pTurkey)
{
}
void Quack()
{
m_pTurkey->Gobble();
}
void Fly()
{
for (int i=0;i<5;i++)
{
m_pTurkey->Fly();
}
}
private:
CTurkey *m_pTurkey;
};
int main()
{
int nRetCode=0;
CDuck *pDuck=new CMallardDuck();
CTurkey *pTurkey=new CWildTurkey();
CDuck *pAdapter=new CTurkeyAdapter(pTurkey);
cout<<"火鸡..."<<endl;
pTurkey->Gobble();
pTurkey->Fly();
cout<<"\n鸭子..."<<endl;
pDuck->Quack();
pDuck->Fly();
cout<<"\n火鸡适配器..."<<endl;
pAdapter->Quack();
pAdapter->Fly();
return nRetCode;
}
PS:为什么给CTurkeyAdapter做变性手术,搞得男不男,女不女的?