问答题
请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,此工程包含有一个源程序文件pmj2.cpp。其中定义了Base1类、Base2类和Derived类。Base1是一个抽象类,其类体中声明了纯虚函数Show。Base2类的构造函数负责动态分配一个字符数组,并将形参指向的字符串复制到该数组中,复制功能要求通过调用strcpy函数来实现。Derived类以公有继承方式继承Basel类,以私有继承方式继承Base2类。在Derived类的构造函数的成员初始化列表中调用Base类的构造函数。请在程序中的横线处填写适当的代码,然后删除横线,以完成Base1、Base/和Derived类的功能。此程序的正确输出结果应为: I'm a derived class. 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。//proj2.cpp#include<iostream>#include<cstring>using namespace std;class Basel{public://**********found**********下列语句需要声明纯虚函数Show——;; }; class Base2{ protected: char*;; Base2(const char*s){_P=new char[strlen(s)+1];//**********found**********下列语句将形参指向的字符串常量复制到该类的字符数组中——;?}~Base2(){delete[]-j);)},//**********found**********Derived类公有继承Basel,私有继承Base2类class Derived:——{public://**********found**********以下构造函数调用Base2类构造函数Derived(const char*s):——{ }void Show(){cout<<_p<<endl;)};int main(){Basel*pb=new Derived(“I’m a derived class.”); pb一>Show(); delete pb; return 0;}
【正确答案】正确答案:(1)virtualvoid Show()=0 (2)strcpy(_p,s) (3)public Basel,private Base2 (4)Base2(s)
【答案解析】解析:本题主要考察抽象类Base1、基类Base2及其派生类Derived,其中涉及纯虚函数、构造函数、析构函数、派生类构造函数等知识点。编写抽象类的纯虚函数时要先看清在派生类中该函数的定义,注意返回值、参数类型、有无eonst关键字几个要点。派生类的构造函数一定要使用成员列表法先对基类初始化。 【解题思路】 (1)主要考查的是纯虚函数的定义。题目要求声明纯虚函数Show,因此首先看Basel类的派生类Deftred类中Show函数的定义: void Show() {cout<<-p<