有以下程序: #include <iostream> #include <string> using namespace std; class base { private:char baseName[10]; public:base ( ){ strcpy (baseName, "Base");}virtual char *myName(){ return baseName;}char *className(){ return baseName;} }; class Derived : public base { private:char derivedName[10]; public:Derived(){ strcpy(derivedName,"Derived");}char *myName(){ return derivedName;}char *className(){ return derivedName;} }; void showPtr(base &p) {cout<<p.myName()<<" "<<p.className() ; } int main () {base bb;Derived dd;showPtr(dd) ;return 0; }
A.DerivedBase
B.BaseBase
C.DerivedDerived
D.BaseDerived
参考答案:A
解析: 本题考核虚函数的应用。类Derived是从基类Base公有派生而来的。因此,Derived是基类Base的子类型。主函数中定义了一个基类对象bb和一个派生类对象dd。从程序中可看出,派生类Derived的对象dd交给了处理基类Base的对象的函数showPtr进行处理。由于在基类中函数myName被定义成虚函数,所以在函数showPtr中调用的myName函数为派生类的成员函数mySame,从而输出Derived。然后输出className,即基类名称Base。