应用题   请使用【答题】菜单命令或直接用VC6打开考生文件夹下的工程proj3,其中声明的是一个人员信息类,补充编制程序,使其功能完整。在main函数中给出了一组测试数据,此种情况下程序的输出应该是:Zhang 20 Tsinghua。
    注意:只能在函数address_change的“// ********333********”和“// ********666********”之间填入若干语句,不要改动程序中的其他内容。
    程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。
    //proj3.h
    #include <iostream>
    #include <string>
    using namespace std;
    class Person{
    char name[20];
    int age;
    char * address;
    public:
    Person(){ age = 0;address = 0;}
    void name_change (char *_name);
    //名字修改函数
    void age_change(int_age);
    //年龄修改函数
    void address_change (char *_add);
    //地址修改函数
    void info_display();
    //人员信息显示
    ~Person();
    //析构函数
    };
    void writeToFile(const char * path);     proj3.cpp
    #include <iostream>
    #include <string>
    #include 'proj3.h'
    using namespace std;     void Person::name_change(char*_name)
    {
    strcpy(name, _name);
    }
    void Person::age_change(int _age)
    {
    age = _age;
    }
    void Person::address _change (char * add)
    {
    if (address!=NULL) delete[]address;
    // ********333********
    // ********666********
    }
    void Person::info_display(){
    cout << name << '\t'
    << age << '\t';
    if(address!=NULL)
    cout << address << endl;
    cout << endl;
    }
    Person::~Person(){
    if(address!=NULL)
    delete[] address;
    }
    void main()
    {
    Person p1;
    p1.name_change('Zhang');
    p1.age_change(20);
    p1.address_change('Tsinghua University');
    p1.address_change('Tsinghua');
    p1.info_display();
    writeToFile(' ');
    }
 
【正确答案】address = new char[strlen(_add)+1]; //给类成员变量动态分配空间 strcpy(address, _add); //把字符串_add复制给address 答案考生文件夹
【答案解析】[考点] 主要考查的是Person类,其中涉及动态数组、析构函数、构造函数和成员函数。 函数address_change(char*_add)的功能是地址修改,也就是说通过该函数把类的地址修改为add字符串。类的私有成员address是字符指针,因此首先要给address分配空间,通过new语句来实现:address=new char[strlen(_add)+1];。接下来就是要复制字符串,使用系统函数strcpy,其用法为strcpy(参数1,参数2),将参数2的内容复制到参数1中。