问题 问答题

请使用“答题”菜单或使用VC6打开考生文件夹proj2下的工程proj2。此工程定义了一个人员类Person,然后派生出学生类Student和教授类Professor。请在程序中的画线处填写适当的代码,然后删除横线,以实现上述定义。此程序的正确输出结果应为:
My name is Zhang.
my name is Wang and my G.P.A.is 3.88
My name is Li,I have 8 publications..
注意:只能在画线处填写适当的代码,不要改动程序中的其他内容,也不能删除或移动“//************found************”。
//源程序
#include <iostream>
using namespace std;
class Person
public:
//************found************
______name=NULL;
Person(char*s) name=new char[strlen(s)+1];strcpy(name,s);
~Person() if(name!=NULL) delete[]name;
//************found************
______Disp() cout<<"My name is"<<name<<".\n"; //声明虚函数
void setName(char*s) name=new char[strlen(s)+1];strcpy(name,s);
protected:
char*name:

class Student: public Person
public:
//************found************
Student(char*s,double g)______
void Disp() cout<<"my name is"<<name<<"and my G.P.A.is il<<gpa<<".\n";
private:
float gpa;

class Professor: public Person
public:
void setPubls(int n)publs=n;
void Disp() cout<<"My name is"<<name<<",I have"<<publs<<"publications.\n";
private:
int publs;

int main()
//************found************
______;
Person x("Zhang");
p=&x;p->Disp();
Student y("Wang",3.88);
p=&y;p->Disp();
Professor z:
z.setName("Li");
z.setPubls(8);
p=&z;p->Disp();
return 0:

答案

参考答案:

 A)Person(){name=NULL;}

B)virtual void Disp(){cout<<"My name is"<<name<<".\n";}

C)Student(char术s,double g):Person(s),gpa(g){}

D)Person *p;

解析:

1)声明Person的无参构造函数。

2)声明Disp为虚函数,而且Disp没有返回值,所以它的函数类型为void。

3)声明Student的构造函数,Student继承了Person类,所以在派生类构造函数中一定要为基类的带参构造函数赋值,同时还要为派生类自己的数据成员初始化赋值。一般格式如下:

派生类名(参数总表):基类名(参数表),数据成员1(初始值1),……

4)由下面的程序,可知p在使用前要声明,故此此处是声明p。

多项选择题 案例分析题
判断题