閱讀下列說(shuō)明、C++代碼和運(yùn)行結(jié)果,填補(bǔ)代碼中的空缺(1)~(5),將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。
【說(shuō)明】
對(duì)部分樂(lè)器進(jìn)行建模,其類圖如圖5-1所示,包括:樂(lè)器(Instrument)、管樂(lè)器(Wind)、打擊樂(lè)器(Percussion)、弦樂(lè)器(Stringed)、木管樂(lè)器(Woodwind)、銅管樂(lè)器(Brass)。
圖5-1 類圖
下面是實(shí)現(xiàn)上述設(shè)計(jì)的C++代碼,其中音樂(lè)類(Music)使用各類樂(lè)器(Instrument)進(jìn)行演奏和調(diào)音等操作。
【C++代碼】
#include<iostream>
using namespace std;
enum Note { /* 枚舉各種音調(diào) */
MIDDLE_C, C_SHARP, B_FLAT
};
class Instrument{ /* 抽象基類,樂(lè)器 */
public:
(1) ; //play函數(shù)接口
virtual void adjust()=0; //adjust函數(shù)接口
};
class Wind (2) {
public:
void play(Note n) { cout<<"Wind.play()"<<n<<end1; }
void adjust() { cout<<"Wind.adjust()"<<end1; }
};
/* 類Percussion和Stringed實(shí)現(xiàn)代碼略 */
class Brass (3) {
public:
void play(Note n) { cout<<"Brass.play()"<<n<<end1; }
void adjust() { cout<<"Brass.adjust ()"<<end1; }
};
class Woodwind : public Wind {
public:
void play(Note n) { cout<<"Woodwind.play()"<<n<<end1; }
};
class Music {
public:
void tune(Instrument* i) { i->play(MIDDLE_C); }
void adjust(Instrument* i) { i->adjust(); }
void tuneAll( (4) e[], int numIns) { /* 為每個(gè)樂(lè)器定調(diào) */
for( int i=0; i<numlns; i++) {
this->tune(e[i]);
this->adjust(e[i]);
}
}
};
/* 使用模板定義一個(gè)函數(shù)size,該函數(shù)將返回?cái)?shù)組array的元素個(gè)數(shù),實(shí)現(xiàn)代碼略 */
int main() {
Music* music= (5) Music();
Instrument* orchestra[]={ new Wind(), new Woodwind() };
music->tuneAll(orchestra, size(orchestra)); /* size返回?cái)?shù)組orchestra的元素個(gè)數(shù) */
for (int i=0; i<size (orchestra), i++)
delete orchestra[i];
delete music;
}
本程序運(yùn)行后的輸出結(jié)果為:
Wind.play() 0
Wind.adjust()
Woodwind.play() 0
Wind.adjust()