应用题   请使用[答题]菜单命令或直接用VC6打开考生文件夹下的工程proj3,其中声明了一个人员信息类Person。在Person类中数据成员name、age和address分别存放人员的姓名、年龄和地址。构造函数Person用以初始化数据成员。补充编制程序,使其功能完整。在main函数中分别创建了两个Person类对象p1和p2,并显示两个对象信息,此种情况下程序的输出应为:
    Jane  25    Beijing
    Tom  22    Shanghai
    注意:只能在函数Person中的“//********333********”和“//********666********”之间填入若干语句,不要改动程序中的其他内容。
    //proj3.h
    #include <iostream>
    #include <string>
    using namespace std;
    class Person{
    public:
    char name[20];
    int age;
    char*  address;
    public:
    Person (char* _name, int_age,char*_add =NULL); //构造函数
    void info_display ();  //人员信息显示
    ~Person ();  //析构函数
    };
    void writeToFile (const char * path ='');
   
    //proj3.cpp
    #include <iostream>
    #include <string>
    #include 'proj3.h'
    using namespace std;
    Person::Person (char*_name, int_age, char* _add) :age (_age)
    {
    //把字符串_name复制到数组name中
    //使address指向一个动态空间,把字符串_add复制到该数组中。
    //******** 333********
    //******** 666********
    }
    void Person::info_display ()
    {
    cout <<name << '\t' <<age << '\t';
    if (address!=NULL)
    cout << address << endl;
    }
    Person:: ~Person ()
    {
    if (address !=NULL)
    delete[] address;
    }
    void main ()
    {
    char add[100];
    strcpy(add, 'Beijing') ;
    Person p1 ('Jane', 25, add) ;
    p1.info_display () ;
    strcpy(add, 'Shanghai');
    Person * p2 =new Person ('Tom', 22, add);
    p2 -> info_display () ;
    delete p2;
    writeToFile ('');
    }
 
【正确答案】strcpy(name, _name); //把name中的内容复制到name中 address =new char[strlen(_add) +1]; //动态给address分配strlen(-add)+1大小的空间 strcpy(address, _add); //把_add中的内容复制到address中
【答案解析】[考点] 本题考查Person类,其中涉及数组、构造函数、成员函数和析构函数。 主要考查考生对构造函数的掌握,根据题目要求,首先使用strcpy()函数把字符串_name复制到数组name中,然后使用new语句分配一个动态空间,使address指向空间首地址,最后把字符串_add复制到该数组中。