问答题 使用VC6打开考生文件夹proj3下的工程proj3,其中定义了一个字符串变量类StringVar。类成员的说明在程序注释中。请在//**********333**********和//**********666**********之间填写StringVar成员函数和友元函数的实现代码。在main函数中给出了一组测试数据,运行时输入: Hello Kitty 此情况下程序的输出应该是: Hello Kitty Borg Borg 注意:只需在//**********333**********和//**********666**********之间填入所编写的若干语句,不要改动程序中的其他内容。//StringVar.h#include<iostream>#include<cstdl ib>#include<cstddef>#include<cstring>USing namespace std;void writeToFile (const char *path);class StringVar{ public: StringVar(int size);//构造函数,size为字符串长度(字符个数)初始值;字符串内容初始化为空串StringVar(const char a[]);//构造函数,用参数数组a的内容初始化当前对象 StringVar (const StringVar&strobj);//复制构造函数 一StringVar(){delete[]value;};//析构函数 int length()const{return Strlen(value);) //从输入流ins输入一个字符串,其中可以包括空格 void input_line(istream&ins); //返回字符串首地址 char*getValue()const{return value;}private: char*value,//字符串首地址 int max_length;//字符串最大长度(字符个数最大值)};//将the_string通过输出流outs输出ostream&operator<<(ostream&outs,const StringVar the_string);//main.cpp#include<iostream>#include<string>#include”StringVar.h”//*********333*********//*********666*********int main() { StringVar namel(30),name2(”Borg”); namel.input_line(cin); StringVar name3(name2); cout<<name1<<endl; cout<<name2<<endl; cout<<name3<<endl; writeToFile(”.\\”); return 0; } //writeToFile.cpp #include<iostream> #include<fstream> #include<Sstream> #include<string> using namespace std; #include”StringVar.h” void writeToFile(const char*path) { char filename[30]; strcpy(filename,path); strcat(filename,”out.dat”); ofstream fout(filename); istringstream is(string(”Jenny Zheng”)); StringVar namel(40),name2(” John”); name1.input_line(is); StringVar name3(name2); fout<<namel<<name2<<name3; fout.close();}
【正确答案】正确答案:StringVar::StringVar(int size):max length(size)//使用成员初始化列表初始化 max_length { value=new char[size]; value[0]=’\0’; } StringVar::StringVar(const char a []) { max_length=strlen(a)+1; value=new char[max_length]; strcpy(value,a), } StringVar:: StringVar (const StringVar&strobj) { max_length=strobJ.max_length; value=new char[strlen(strobj. value)+1]; strcpy(value,strobj.value); } void StringVar::input_line(istream& ins) { int i=0; char ch; while(i<max,.1ength一1&&(ch =ins.get())!=’/n’) { value[i++]=ch; } value[i]=’\0’; } ostream&operator<<(ostream&outs, const StringVar the_string) { outs<<the_string.getValue()<< end1; return outs; }
【答案解析】