问答题
请使用VC6或使用[答题]菜单打开考生文件夹proj3下的工程文件proj3。本题创建一个小型字符串类,字符串长度不超过100。程序文件包括proj3.h、proj3.cpp、writeToFile.obj。补充完成proj3.h,实现默认构造函数MiniString(const char*s="")和析构函数~MiniString()。
要求:
补充编制的内容写在“//********333********”与“//********666*******”之间,不得修改程序的其他部分。
注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。
//proj3.h
#include <iostream>
#include <iomanip>
using namespace std;
class MiniString
{public:
friend ostream &operator << ( ostream&output, const MiniString &s )
//重载流插入运算符
{output << s.sPtr; return output;
}
friend istream &operator >> ( istream &input, MiniString &s )
//重载流提取运算符
{ char temp[100];
//用于输入的临时数组
temp[0] = '/0';
//初始为空字符串
input >> setw{{U}} {{/U}}>> temp;
int inLen = strlen(temp); //输入字符串长度
if( inLen! = O)
{
s.length = inLen; //赋长度
if( s.sPtr! = 0) delete []s.sPtr;
//避免内存泄
s.sPtr = new char [ s. length +1];
strcpy( s.sPtr, temp );
//如果s不是空指针,则复制内容
}
else s.sPtr [0] = '/0';
return input;
}
//************* 333***********
//************* 666***********
private:
int length;
//字符串长度(不超过100个字符)
char * sPtr;
//指向字符串起起始位置
};
//proj3.cpp
#include <iostream>
#include <iomanip>
using namespace std;
#include "proj3.h"
int main ()
{
void writeToFile (char * );
MiniString strl ( "Happy" );
cout << str1 << "/n";
writeToFile ("");
return 0;
}
【正确答案】MiniString(const char*s="")
{
length=Strlen(s); //求字符串S的长度赋值给lenath
sPtr=new char[length+1]; //动态分配长度为(length+1)的空间给Spet
Strcpy(sPtr, s); //把字符串s复制到sptr中
}
~MiniString(){delete[]sPtr;) //删除空间sptr
【答案解析】[考点] 本题考查MiniString类,其中涉及动态数组、运算符重载、构造函数和析构函数。
[解析] 主要考查考生对构造函数和析构函数的掌握,题目要求完成默认构造函数和析构函数,先看私有成员:
int length;//字符串长度(不超过100个字符)
char*sPtr;//指向字符串起始位置
因此先使用strlen函数计算字符串长度,然后给sPtr分配空间,再使用strcpy复制字符串,最后在析构函数中使用delete语句释放空间。