有如下程序: #include<iostream> using namespaee std;c lass Animal{ public: virtual char*getType( )const{return"Animal";} virtual char*getVoice( )const{return"Voice";} }; class Dog:public Animal{ public: char*getType( )const{return"Dog";} char*getVoice( )eonst{return"Woof";} }; void type(Animal&A) {cout<<a.getType( );} void speak(Animal A) {eout<<a.getVoice( );} int main( ){ Dog d;type(D) ;cout<<"speak";speak(D) ;cout<
参考答案:Dog SpeakVoice
解析: 派生类继承基类,并重新定义了基类的虚函数。void type(Animal&A) 是对象引用作为函数参数,传递的是地址,是“地址调用”,故a.getType( )调用的是派生类重新定义后的get—Type( )成员函数。void speak(Animal A) 是对象作为函数参数,是“传值调用”,在进行函数调用时,将派生类对象赋值给基类对象。但是,对象a只能调用派生类继承自基类的成员。故在a.getVoice( )中调用的是基类的虚函数getVoice( ),打印“Voive”。