请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程文件proj3。本题创建一个小型字符串类,字符串长度不超过100。程序文件包括proj3.h、proj3.cpp、writeToFile.obj。补充完成重载赋值运算符函数,完成深复制功能。

admin2016-08-19  26

问题 请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程文件proj3。本题创建一个小型字符串类,字符串长度不超过100。程序文件包括proj3.h、proj3.cpp、writeToFile.obj。补充完成重载赋值运算符函数,完成深复制功能。
    屏幕上输出的正确结果应该是:
    Hello!
    Happy new year!
要求:
补充编制的内容写在“//**********333**********”与“//**********666**********”两行之间。不得修改程序的其他部分。
    注意:
    程序最后调用writeToFile函数,使用另一组不同的测试数据,将不同的运行结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件。
1   //proj3.h
2   #include
3   #include
4   using namespace std;
5   class MiniString
6   {
7  public:   
8    friend ostream&operator<<(os-tream&output,const MiniString&s)//重载流插入运算符
9    {  output<10    friend istream&operator>>(is-tream&input,MiniString&s)//重载流提取运算符
11    {char temp[100];//用于输入的临时数细
12    temp[0]=’\0’;//初始为空字符串
13    input>>setw(100)>>temp;
14    int inLen=strlen(temp);
15    //输入字符串长度
16    if(inLen!=0)
17    {
18    s.length=inLen;  //赋长度if(s.sPtr!=0)delete[]s.sPtr;//避免内存泄漏
19    s.sPtr=new char[s.length+1];
20   strcpy(s.sPtr,temp);//如果s不是空指针,则复制内容
21    }
22    else s.sPtr[0]=’\0’;//如果s是空指针,则为空字符串
23    return input;
24    }
25    void modString(const char  *string2)//更改字符串内容
26    {
27    if(string2 !=0)//如果string2不是空指针,则复制内容
28    {
29    if(strlen(string2)!=length)
30    {
31    length=strlen(string2);
32    delete[]sPtr;
33    sPtr=new char[length+1];//分配内存
34    }
35    strcpy(sPtr,string2);
36    }
37  else sPtr[0]=’\0’;
   //如果string2是空指针,则为空字符串
38    }
39    MiniString&operator=(const Mini-String&otherString);
40    MiniString(const char  *s = " "):length((S!=0)?strlen(S):0)//构造函数
41  {
42    SPtr=0;
43    if(length!=0)
44    setString(s);
45    }
46    ~MiniString()//析构函数
47    {delete[]sPtr;}
48    private:
49    int length;  //字符串长度
50    char=* sPtr;  //指向字符串起始位置
51  void setString(  const  char*string2)  //辅助函数
52    {
53   sPtr=new char[strlen(string2)+1];  //分西己内存
54    if(string2 !=0)strcpy(sPtr,string2);//如果string2不是空指针,则复制内容
55    else sPtr[0]=’\0’;//如果string2是空指针,则为空字符串
56    }
57   };
1   //proj3.cpp
2    #include
3    #include
4    using namespace std;
5    #include"proj 3.h"
6
7    MiniString&MiniString::operator=(const MiniString&otherString)
8    {//重载赋值运算符函数。提示:可以调用辅助函数setString
9    //*************333*************
10
11
12    //*************666*************
13  }
14
15  int main()
16  {
17    MiniString strl({Hello!"),str2;
18    void writeToFile(const char*);
19    Str2=strl ;//使用重载的赋值运算符
20    str2.modString("Happy new year!");
21    cout<22    cout<23    writeToFile(" ");
24    return 0;
25  }

选项

答案1 length =OtherString.length;//把对象字符串otherstrinq的长度赋值给变量length 2 setString(otherString.sPtr);//调用函数setstrinq,实现给类变量sptr分配空间,以及逐个把对象otherstrinq字符串的值复制到sptr中 3 return*this;//返回被赋值的对象

解析 主要考查考生对运算符重载的掌握,题目要求重载赋值运算符函数。要重载的运算符是“=”,即赋值的意思。提示:可以调用辅助函数setString。该函数的功能是复制形参的字符串到sPtr中,因此,首先复制length,其次通过函数set-String复制sPtr,最后按要求返回*this;。
转载请注明原文地址:https://kaotiyun.com/show/K4Np777K
0

最新回复(0)