使用VC6打开考生文件夹下的工程test28_3。此工程包含一个test28_3.cpp,其中定义了类Person,但该类的定义并不完整。请按要求完成下列操作,将程序补充完整。
(1)定义类Person的私有数据成员forename、surname 和 money,forename 和 surname都是char型的指针数据,money是double型的数据。请在注释“//**1**”之后添加适当的语句。
(2)完成类Person的带三个参数的构造函数Person(char *f, char *s,double m),分别为forename和surname申请新的空间来存储参数f和s指针指向的内容,注意空间的大小,最后把参数m的值赋给money,请在注释“//**2**”之后添加适当的语句。
(3)完成类Person的析构函数的定义,把forename和surname指向的空间释放,请在注释“//**3**”之后添加适当的语句。
(4)完成类Person的成员函数display的定义,使其以格式“forname surname has money”的形式输出内容,请在注释“//**4*。”之后添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
输出结果如下:
Richard Berk has 1000.56
源程序文件test28_3.cpp清单如下:
#include <iostream.h>
#include <string.h>
class Person
private:
//** 1 **
double money;
public:
Person(char *f, char *s, double m);
~Person();
void display();
;
Person::Person(char *f, char *s, double m)
//** 2 **
strcpy(forename, f);
surname = new char[strlen(s)+1];
strcpy(surname, s);
money=m;
Person: :-Person ()
//** 3 **
void Person:: display ( )
//** 4 **
void main ( )
Person p("Richard", "Berk", 1000.56);
p.display ( );
参考答案:
(1)
char *forename;
char *surname;
(2)
forename = new char[strlen(f)+1];
(3)
delete []forename;
delete []surname;
(4)
cout<<forename<<" "<<surname<<"has"<<money<<end1;
解析: 主要考查考生对于类的定义和字符指针的动态空间申请和释放的掌握,具中(2)中new关键字是动态申请空间,里面使用了函数strlen,该函数是返回参数字符串的长度,之所以加一是要加入字符串结尾标志,这一点考生切记。 (3)中 delete是释放动态内存的关键字,释放一位数组占用的内存格式是先写[],之后是指针名,括号内不写数组的大小。