64,636
社区成员
发帖
与我相关
我的任务
分享
//---------------------------------------------------------------------------
#pragma hdrstop
#include<iostream.h>
//using namespace std;
enum note{middleC,Csharp,Cflat};
class instrument
{
public:
virtual void play(note) const
{
cout<<"instrument::play"<<endl;
}
virtual char* what() const
{
return "instrument";
}
virtual void adjust(int){}
};
//Wind objects are instruments
//because they have the same interface:
class wind:public instrument
{
public:
//redefine interface fuction:
void play(note) const
{
cout<<"wind::play"<<endl;
}
char* what() const{ return "wind";}
void adjust(int){}
};
class percussion:public instrument{
public:
void play(note)const
{
cout<<"percussion::play"<<endl;
}
char * what() const{return "percussion";}
void adjust(int){}
};
class String:public instrument
{
public:
void play(note) const
{
cout<<"string::play"<<endl;
}
char* what() const{return "string";}
void adjust(int){}
};
class brass:public wind
{
public:
void play(note)const
{
cout<<"brass::play"<<endl;
}
char* what()const{return "brass";}
};
class woodwind:public wind
{
public:
void play(note) const
{
cout<<"woodwind::play"<<endl;
}
char* what() const{return "woodwind";}
};
//Identical function from before:
void tune(instrument& i)
{
i.play(middleC);
}
void f(instrument& i){i.adjust(1);}
//Upcasting during array initialization
instrument* A[]={
new wind,
new percussion,
new String,
new brass
};
//---------------------------------------------------------------------------
#pragma argsused
int main()
{
wind flute;
percussion drum;
String violin;
brass flugelhorn;
woodwind recorder;
tune(flute);
tune(drum);
tune(violin);
tune(flugelhorn);
tune(recorder);
f(flugelhorn);
system("pause");
}
//---------------------------------------------------------------------------