问答题
请使用【答题】菜单命令或直接用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中。