题库 题库

【简答题】

请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程文件proj3。本题创建一个小型字符串类,字符串长度不超过l00。程序文件包括pmj3.h、proj3.cpp、writeToFile.obj。补充完成重载赋值运算符函数,完成深复制功能。
屏幕上输出的正确结果应该是:
Hello!
Happy new year!
补充编制的内容写在“//**********333**********”与“//**********666**********”两行之间。
不得修改程序的其他部分。
注意:
程序最后调用writeToFil。函数,使用另一组不同的测试数据,将不同的运行结果输出到文件0ut?dat中。
输出函数writeToFile已经编译为obj文件。
//proj3.h
#include
#include
using namespace std;
class MiniString
{
pubhc:
friend。8tream&operator<<(oatream&output,const MiniString&s)//重载流插入运算符
{ output<
friend istream&operator>>(istream&input,MiniString&8)//重载流提取运算符
{ char temp[100];//用于输入的临时数组
temp[0]=’\0’://初始为空字符串
input>>setw(100)>>temp;
int inLen=strlen(temp);//输入字符串长度
if(inLen!=0)
}
s.1ength=inLen;//赋长度
if(s.sPtr!=0)delete[]s.sPtr;//避免内存泄漏
s.sPtr=Hew char[s.1ength+1];
strcpy(s.sPtr,temp);//如果8不是空指针,则复制内容
}
else s.sPtr[0]=’\0’;//如果s是空指针,则为空字符串
retum input;
}
void modString(const char}string2)//更改字符串内容
{
if(strin92 1=0)//如果strin92不是空指针,则复制内容
{
if(strlen(strin92)!=length)
{
length=strlen(strin92);
delete[]sPtr;
sPtr=new char[1ength+1];//分配内存
}
strcpy(sPtr,strin92);
}
else sPtr[0]=’\0’;//如果string2是空指针,则为空字符串
}
MiniString&operator=f const MiniString&otherString);
MiniString(corot char*s=""):lengtll((s!=0)?strlen(s):0)//构造函数
{
sPtT=0:
if(1ength[=0)
setString(S);
}
~MiniString()//析构函数
{delete[]sPtr;}
private:
int length;//字符串长度
char*sPtr;//指向字符串起始位置
void setString(const char*string2)//辅助函数
{
sPtr=Dew char[str|en(string2)+1];//分配内存
if(stnIl92!=0)strcpy(sPtr,string2);//如果string2不是空指针,则复制内容
else slur[0]='\0';//如果string2是空指针,则为空字符串
}
};
//pwj3.cpp
#'include
#include
using namespace std;
#include”proj3.h”
MiniString&MiniStrin9::0perator=(const MiniString&otherString)
{//重载赋值运算符函数。提示:可以调用辅助函数setString
//*************333**********
//*************666**********
}
int main()
{
MiniSu'ing strl(”Heuo!”),str2;
void writeToFile(const char*);
sir2=strl;//使用重载的赋值运算符
str2.modString("Happy new year!");
cout<<STRL<<'\N':
cout<<STR2<<'\N':
writeToFile("");
return 0;
}

参考答案

lEnGth=othErStrinG.1EnGth; //把对象字符串0thErStrinG的长度赋值给变量lEnGth sEtStrinG(othErStrinG.sPtr); //调用函数sEtstrinG,实现给类变量sptr分配空间,以及逐个把对象0thErstrinG字符串的值复制到sptr中 rEturn}this: //返回被赋值的对象

相关试题

单选题 在函数中,可以用aut0、extem、register和static这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是(  )。 查看答案
单选题 在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是(  )。 查看答案
单选题 在软件开发中,需求分析阶段可以使用的工具是(  )。 查看答案
单选题 下面描述中,不属于软件危机表现的是( )。 查看答案
单选题 决定c++语言中函数的返回值类型的是( )。 查看答案
单选题 有如下类定义:
class AA
{
im a:
public:
int getRef()const{return&a;}//①
int getValue()const{return a;}//②
void set(int n)const{a=n;}//③
friend void show(AA aA.const{cout<
};
其中四个函数的定义中正确的是(  )。
查看答案
单选题 下列关于多态性的描述,错误的是( )。 查看答案
单选题 有如下类定义:
Class AA{ int a: PubliC: AA(int n=O):a(n){}
};
Class BB:publiC AA{ publiC:
BB(int n)
};
其中横线处的缺失部分是(  )。
查看答案
单选题 下列有关类成员的叙述中,正确的是( )。 查看答案
单选题 如果派生类以proteCted方式继承基类,则原基类的proteCted成员和publiC成员在派生类中的访问属性分别是( )。 查看答案
单选题 类的析构函数是在( )调用的。 查看答案
单选题 语句int*P=&k;定义了指针P,与这个语句等效的语句序列是( )。 查看答案
单选题 有以下程序:
#include
void fun(int a,int b,int C.
{ a=456,b=567,c=678;}
void main()
{
int X=10,Y=20,Z=30;
fun(X,Y,z);
aout<<X<<’,’<<Y<<’,’<<Z<
}
输出结果是( )。
查看答案
单选题 关于在调用模板函数时模板实参的使用,下列表述中正确的是(  )。 查看答案
单选题 有三个关系R、S和T如下:

则由关系R和s得到关系T的操作是( )。
查看答案
单选题 将前缀运算符“--”重载为非成员函数,下列原型中能正确用于类中说明的是(  )。 查看答案
单选题 有如下类声明:
class Base{
protected:
int amount;
public:
Base(int n=0):amount(n){}
int getAmount()const{retum amount;}
};
class Derived:public Base{
protected:
int value;
public:
Derived(int m,int n):value(m),Base(n){}
int getData()const{return value+amount;}
}:
已知x是一个Derived对象,则下列表达式中正确的是( )。
查看答案
单选题 判断char型变量c是否为小写字母的正确表达式是( )。 查看答案
单选题 下列有关内联函数的叙述中,正确的是( )。 查看答案
单选题 有如下程序:
#inClude
using namespaCe std; ClaSS A{
publiC:
A(int i){x=i;}
void dispa(  ){Cout<<X<<’,’;}&NBSP;&NBSP;&NBSP;
int x; };
Class B:publiC A{ publiC:
B(int i):A(i+10){x=i;}
vold dispb(  ){dispa(  );Cout<<X<<ENDL;}&NBSP;&NBSP;&NBSP;
int x; };
int main(  )} B b(2); b.dispb(  );
return 0; }
执行这个程序的输出结果是(  )。
查看答案