#include<stdio.h>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<string>
#include<vector>
#include<cstring>
#include<queue>
#include<set>
//#include"Useful.h"
using namespace std;
//class Y : public X {
// int i;
// public:
// Y() {i=0;}
// int change() {
// i = permute();
// return i;
// }
// void set(int ii) {
// i = ii;
// X::set(ii);
// }
//};
enum note{ middleC, Csharp, Cflat };
class Instrument {
public:
virtual void play(note) const = 0;
virtual char* what() const = 0;
virtual void adjust(int ) = 0;
};
class Wind : public Instrument {
public:
//Override interface function:
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 Stringed : public Instrument {
public:
void play(note) const {
cout << "Stringed :: play " << endl;
}
char * what() const {
return "Stringed";
}
void adjust (int) {}
};
class Brass : public Wind {
public:
void play(note) const {
cout << "Brass :: play" << endl;
}
char * what() const {
return "Brass";
}
// void adjust(int ) {}
};
class Woodwind : public Wind {
public:
void play(note) const {
cout << "Woodwind :: play" <<endl;
}
char* what()const {
return "Woodwind";
}
};
void f(Instrument & i) {
i.adjust(1);
}
void tune (Instrument & i) {
i.play(middleC);
}
//Instrument* A[]={new Wind ,new Percussion, new Stringed, new Brass};
int main() {
Wind flute;
Percussion drum;
Stringed violin;
Brass flugelhorn;
Woodwind recorder;
tune(flute);
tune(drum);
tune(violin);
tune(flugelhorn);
tune(recorder);
f(flugelhorn);
//
// cout << "sizeof(x) = " << sizeof(X) << endl;
// cout << "sizeof(Y) = " <<sizeof(Y) << endl;
//cout << ""
// Y D;
// D.change();
// D.read();
// D.permute();
// D.set(12);
//Wind flute;
//tune(flute);
return 0;
}
C++虚函数
最新推荐文章于 2019-11-25 23:54:26 发布