问答题
请使用VC6或使用[答题]菜单打开考生目录proj3下的工程文件proj3,此工程中包含一个源程序文件proj3.cpp,其中定义了用于表示日期的类Date、表示人员的类Person和表示职员的类Staff;程序应当显示:
张小丽123456789012345
但程序中有缺失部分,请按照以下提示,把缺失部分补充完整:
(1)在“//**1** ****found****”的下方是构造函数的定义中的一个语句,它用参数提供的身份证号id_card_no对数据成员idcardno进行初始化。
(2)在“//**2** ****found****”的下方是构造函数定义的一个组成部分,其作用是利用参数表中的前几个参数对基类Person进行初始化。
(3)在“//**3** ****found****”的下方定义了一个Staff对象,其中:
身份证号:123456789012345
姓名:张三
出生日期:1979年5月10日
性别:女
工作部门:人事部
工资:1234.56元
注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“****found****”。填写的内容必须在一条语句中完成,否则评分将产生错误。
//proj3.cpp
#include <iostream>
using namespace std;
class Date
{
public:
int year;
int month;
int day;
Date():year(0), month(0), day(0) {}
Date (int y, int m, int d) :year (y), month (m), day (d) {}
};
class Person
{
char idcardno[16]; //身份证号
char name[20]; /姓名
Date birthdate; //出生日期
bool ismale; //性别:true为男, false为女
public:
Person(const char * pid, const char* pname, Date pdate, bool pmale);
const char * getIDCardNO () const {return idcardno; }
const char * getName () const { return name; }
void rename(const char * new_name);
Date getBirthDate () const { return birthdate; }
bool isMale()const{ return ismale;}
};
class Staff: public Person
{
char department[20]; //工作部门
double salary; //工资
public:
Staff (const char * id_card_no, const char * p_name, Date birth_date,bool is_male,
const char * dept, double sal);
const char * getDepartment()const{return department; }
void setDepartment(const char * d);
double getSalary () const { return salary; }
void setSalary(double s){ salary =s; }
};
Person::Person(const char * id_card_no, const char * p_name, Date birth_date, bool is_male)
:birthdate (birth_date), ismale (is_male)
{
//**1** ********** found**********
______;
strcpy(name, p_name);
}
void Person::rename(const char * new_name){ strcpy(name, new_name); }
Staff::Staff (const char * id_card_no, const char * p_name, Date birth_date, bool is_male,
//**2** **********found**********
const char * dept, double sal):______
{
setDepartment(dept);
setSalary(sal);
}
void Staff:: setDepartment (const char * dept)
{
strcpy(department, dept);
}
int main()
{
//**3** ********** found**********
Zhangsan. rename ("张小丽");
cout << Zhangsan.getName () << Zhangsan.getIDCardNO () << endl;
return 0;
}
【正确答案】(1)strcpy(idcardno, id_card_no)
(2)Person(id_card_no, p_name, birth_date, is_male)
(3)Staff Zhangsan("123456789012345", "张三", Date(1979, 5, 10), false, "人事部", 1234.56)
【答案解析】[考点] 本题考查Date类、Person类及其派生类Staff类,其中涉及构造函数、const函数、bool函数和成员函数。
[解析] (1)主要考查考生对strcpyr函数的掌握,复制字符串要使用strepy函数,其格式为:strcpy(字符串1,字符串2);。
(2)主要考查考生对构造函数的掌握,派生类的构造函数要使用成员列表初始化先调用基类的构造函数。
(3)主要考查考生对构造函数的掌握,由题目要求可知要将对象初始化为:Zhangsan("123456789012345","张三",Date(1979,5,10),false,"人事部",1234.56);。