单选题
有如下程序:
#include<iostream>
us ing namespace std;
class Publication{//出版物类
char name[30];
public:
Publication(char *name="未知名称"){
strcpy(this->name, name);
}
const char *getName()const{return name;}
virtual const char *getType()const{return"未知类型";}
};
class Book:public Publication{//书类
public:
Book(char *name):Publication(name){}
virtual const char *getType()const{return"书";}
};
void showPublication(Publication &p){
cout<<p.getType()<<":"<<p.getName()<<endl;
}
int main(){
Book book("精彩人生");
showPublication(book);
return 0;
}
运行时的输出结果是______。
【正确答案】
D
【答案解析】[解析] 创建对象book,派生类的构造函数调用基类的构造函数将未知名称赋值为“精彩人生”。然后调用派生类的构造函数。showPublication函数参数是引用,一个基类的引用可以指向派生类对象,因此p.getType()调用的是引用实际指向的派生类的函数定义版本,p.getName()调用的是基类的函数定义版本。输出书:精彩人生。