问答题 请使用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);。