欢迎来到天天文库
浏览记录
ID:38373349
大小:32.00 KB
页数:3页
时间:2019-06-11
《计算机二级C++笔试习题和详解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、(4)有如下程序: #includeusing namespace std;class C1{ public: ~C1(){cout<<1;}};class C2:public C1{ public: ~C2(){cout<<2;}};int main(){ C2 cb2; C1 *cb1; return 0;}运行时的输出结果是A)121 B)21 C)211 D)12B实际上此处的C1*cb1并没有创建类的对象,它只是一个指针,因此不存在类对象的
2、销毁,即C1*cb1不会引起输出。故答案必定为2个数字的,要么B,要么D。而C2是C1的子类(即C2继承C1),构造子类的时候必须先构造父类,而销毁的时候必须先销毁子类,然后销毁父类,因此程序结束时先销毁子类,输出2,再销毁父类,输出1。故最终结果是21,选B(5)有如下程序: #includeusing namespace std;class Publication{ //出版物类 char name[30]; public: Publication(char
3、 *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
4、 char * getType()const{return"书";}};void showPublication(Publication &p){ cout<
5、,首先它声明并创建了Book类型的变量,并且初始化该类里面的成员变量name为“精彩人生”(注意,Book以public形式继承自Publication,Publication中的变量可以被Book类所用,即Publication中的name也是Book的成员变量),那么这一句是什么意思呢——“Publication(char *name="未知名称")”,这句就是说,如果在创建Publication或者Book对象时,如果没有传入初始的参数(此处为name),那么name就被赋值为“未知名称”,
6、但是此处main中已经给了初始化参数“精彩人生”,所以此处那么就变成“精彩人生啦”。“virtual const char * getType()const{return"未知类型";}”这句在Publication这个类中,带有virtual的函数是虚函数,表示如果有子类,那么子类中必须重写该函数,因此Book中将函数重写为“virtual const char * getType()const{return"书";}”。因此对于book这个变量(不是Book这个类型,book是一个变量),当它
7、调用getType()的时候其实就是执行这个函数“virtual const char * getType()const{return"书";}”。好了,现在我们看看main的第二行,这行调用了showPublication这个函数,传入的参数是book,那么我们看一下showPublication函数的内容——“cout<
8、,由于p实际是book,所以即便函数类型里面写它是“Publication &p”(&表示引用调用,即修改p本身实际等于修改book)Publication类型,但其实它是Book类型,因此getType()就会使用Book里面的成员函数返回“书”,输出,然后再输出冒号,然后调用getName(),子类中无getName()函数,所以使用父类的此函数,返回“精彩人生”,输出。所以选择D(5)有如下程序: #include using namespace std;
此文档下载收益归作者所有