c++编程思想中的例子,谁能帮我解释下?
- C/C++ code
//---------------------------------------#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 initializationinstrument* A[]={ new wind, new percussion, new String, new brass}; //---------------------------------------#pragma argsusedint 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");}//---------------------------------------
代码中的那个instrument指针数组究竟起个什么作用?书上原话是这样的:“数组A [ ]存放指向基类instrument 的指针,所以在数组初始化过程中发生向上映射。”
[解决办法]
代码不完整还是咋回事?貌似note和A都没有啥用啊?
向上映射指派生类指针赋值给基类的变量,也就是基类类型的指针指向了派生类类型的对
象所占的内存空间,那么,很显然,可以保证基类类型指针的可访问范围都是有效,所以这种“向上映
射”是绝对安全的(所谓“向上”是指类层次的上下关系,基类在上,派生类在下)。
[解决办法]
向上映射指派生类指针赋值给基类的变量-->向上映射指派生类指针赋值给基类指针类型的变量
[解决办法]
没有看过这书,等大牛来解释
[解决办法]
[解决办法]
[解决办法]
A完全没引用,怎么可能链接不过
A的作用就是保存派生类对象的基类型指针
[解决办法]