读书人

c++编程思想中的例子哪位高手能帮小

发布时间: 2012-06-16 20:34:32 作者: rapoo

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都没有啥用啊?

向上映射指派生类指针赋值给基类的变量,也就是基类类型的指针指向了派生类类型的对
象所占的内存空间,那么,很显然,可以保证基类类型指针的可访问范围都是有效,所以这种“向上映
射”是绝对安全的(所谓“向上”是指类层次的上下关系,基类在上,派生类在下)。
[解决办法]
向上映射指派生类指针赋值给基类的变量-->向上映射指派生类指针赋值给基类指针类型的变量
[解决办法]
没有看过这书,等大牛来解释
[解决办法]
探讨

引用:

向上映射指派生类指针赋值给基类的变量-->向上映射指派生类指针赋值给基类指针类型的变量

枚举note不用管。那我就实在不明白A都干了些什么了,似乎没有用。但是我若注释掉A的这段代码,编译器会报link错误,A似乎对函数f有什么影响,因为我将两个都注释掉的话就不报错了。

[解决办法]
探讨
C/C++ code

//---------------------------------------

#pragma hdrstop

#include<iostream.h>
//using namespace std;
enum note{middleC,Csharp,Cflat};

class instrum……

[解决办法]
A完全没引用,怎么可能链接不过

A的作用就是保存派生类对象的基类型指针
[解决办法]


探讨

引用:

A完全没引用,怎么可能链接不过

A的作用就是保存派生类对象的基类型指针


我想也是这样,不知道你们用c++builder2010的感觉如何,

读书人网 >C++

热点推荐