问答题 试题源程序文件清单如下: #include<iostream> #include<iornanip> 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(100)>>temp; int inten= strlen(temp); //输入字符串长度 if(inten! =0){ s.length= inten; //赋长度 if(s.sPtr!=0) delete[]s.sPtr; //避免内存泄露 s.sPtr=new char[s.length+1]; strcpy(s.sPtr,temp); //如果s不是空指针,则复制内容 } else s.sPtr[0]='/0'; //如果s是空指针,则为空字符串 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<<strl<<"/n"; writeToFile("K://K01//61010002/"); return 0: }
【正确答案】
【答案解析】[解析] 默认构造函数MiniString (const char*s="")中,需要用类的数据成员char*sPtr动态分配足够的存储空间来接收s所指向的字符串,可采用strlen()函数求字符串长度,但分配空间时需要加1。在析构函数中应该将sPtr指向的存储空间释放。