首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
使用VC6打开考生文件夹proj3下的工程proj3,其中定义了一个字符串变量类StringVar。类成员的说明在程序注释中。请在//**********333**********和//**********666**********之间填写StringVa
使用VC6打开考生文件夹proj3下的工程proj3,其中定义了一个字符串变量类StringVar。类成员的说明在程序注释中。请在//**********333**********和//**********666**********之间填写StringVa
admin
2017-07-28
38
问题
使用VC6打开考生文件夹proj3下的工程proj3,其中定义了一个字符串变量类StringVar。类成员的说明在程序注释中。请在//**********333**********和//**********666**********之间填写StringVar成员函数和友元函数的实现代码。在main函数中给出了一组测试数据,运行时输入:
Hello Kitty
此情况下程序的输出应该是:
Hello Kitty
Borg
Borg
注意:只需在//**********333**********和//**********666**********之间填入所编写的若干语句,不要改动程序中的其他内容。
//StringVar.h
#include<iostream>
#include<cstdlib>
#include<cstddef>
#include<cstring>
using namespacestd;
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 name1(30),name2("Borg");
name1.input_line(cin);
StringVar name3(name2);
cout<<namel<<endl:
cout<<name2<<endl:
cout<<name3<<endl:
writeToFile(".\\");
return0;
}
//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 name1(40),name2("John");
name1.input_line(is);
StringVar name3(name2);
fout<<name1<<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 Strj
解析
本题考查构造函数和析构函数的定义、类的成员函数、重载流运算符>>和插入运算符<<和预定义流对象。
由StringVar.h这个头文件可知:头文件中定义了StringVar类,它包含的成员信息如下:
两个数据成员:char*类型的vaLlue,指向字符串的首地址;int类型的max_length,表示字符串的最大长度。两个构造函数:接收int类型的构造函数和接收const char a[]的构造函数。一个复制构造函数:用参数strobj对象的成员值给当前对象的成员赋值;析构函数:使用delete[]释放value指向的地址空间;length()成员函数:返回成员value指向的字符串长度;input_line()成员函数:使用输入流参数输入一个字符串,保存到Value指向的内存空间;getValue()成员函数:常成员函数,返回value的值。
另外类定义体外部还声明一个重载“<<”运算符函数,将StringVaur对象中value指向的字符串输出,并返回输出流outs的引用
Stringvar.h中,已经给出的定义有:析构函数、length()函数和getValue()函数,所以需要我们完成的函数定义有:构造函数、复制构造函数、input_line()函数和重载的“<<”运算符函数
①StringVar(int size);
题意指出,size为字符串长度(字符个数)初始值,字符串内容初始化为空串,所以需要使用size设置成员max_len舢,为value申请size个字符的存储空间,并把value的第一个字符没置为’\0’表示空串,这样保证析构函数的delete[]也是正确的。
②StringVar(const char a[ ]);
题意指出,使用参数数组a的内容初始化对象的成员,即将数组a中的内容,存放到value指向的内存空间,由于Value是使用new分配的(保证析构函数的delete[ ]是正确的),所以不能简单的把数组a的首地址赋给value,需要将数组a的内容复制到Value指向的内存空间中,另外成员max_length,初值最小必须是value指向的内存空间长度,即value指向的字符串长度+1(题意中max_length表示字符个数的最大值,所以需要包含字符串结束符’\0’)(此构造函数的形参必须传入的足宁符串,如果是字符数组,必须传入数组的长度,以防数组a的最后一个字符不是结束符’\0’,此时strlen()函数获取的长度,就不是字符数组a的字符个数)
③stringVar(const StringVar& strobj);
复制构造函数需要将形参strobj的成员赋给当前调用该复制构造函数的对象成员,在赋值value时,同样需要为value分配足够的内存空间。
④input_line(istream& ins);
input_line()函数需要使用形参ins输入流,输入一个字符串存放到value中,题意要求可以输入空格,所以我们不能直接用输入流ins和输入运算符,因为输入运算符会丢弃空白符、空格符和制表符,可以使用输入流ins的成员函数:get()和while循环,逐个输入字符存放到value下标i的字符中,直到输入的字符为换行符或value存满(i=max_length)为止,当这两个条件满足其一,那么就应该停止输入,另外需要注意:value指向的字符串结尾,必须包含空字符’\0’,所以下标max_length-1必须是空字符,循环输入时,i取值最大为max_length-2。
⑤ostream&operator<<(ostream&outs,constStringVar the_string);
输出运算符重载函数,题意要求将the_string通过输出流outs输出,由于the_string是StringVar对象,所以输出的应该是对象的成员value指向的字符串,根据返回值可知,函数必须返回输入流ostream的引用;另外由于第一形参是输人流outs,所以无法通过StringVar对象来调用,该函数不是类的成员函数,函数定义时,不能限定StringVar作用域,由于该函数不是类的成员函数,所以使用输出流outs输出value指向的字符串时,不能直接使用私有成员value,而是应该使用getValue()公有成员函数,返回value的值,再输出。
转载请注明原文地址:https://kaotiyun.com/show/IFAp777K
本试题收录于:
二级C题库NCRE全国计算机二级分类
0
二级C
NCRE全国计算机二级
相关试题推荐
定义如下变量和数组:inti;inty[2][3]={2,4,6,8,10,12};则下面语句的输出结果是【】。for(i=0;i<2;i++)cout<<y[1-i)[i+1]<<",";
树L中,度为1、2、3、4、5和6的节点个数为6、4、3、3、5、1,则L中叶子的个数是【】。
下列程序时类D代码段出现编译错误,原因是【 】。#include<iostream.h>classA{public:A(charc){cout<<"A’sconstructor."<<c<<endl
数据库物理结构设计不包括( )。
冒泡排序算法在最好的情况下的元素交换次数为( )。
如下类定义中包含了构造函数和拷贝构造函数的原型声明,请在横线处填写正确的内容,使拷贝构造函数的声明完整。classmyClass{private:intdata;public:myClass(in
下列工具中为需求分析常用工具的是()。
在单链表上难以实现的排序方法有希尔排序、【 】和堆排序。
对于语句cout<<endl<<x;中的各个组成部分,下列叙述中错误的是
重新定义标识符的作用域规定是外层变量被隐藏,______变量是可见的。
随机试题
下列关于民事诉讼中的法定代理人与委托代理人的表述,哪些是正确的?
依照《安全生产法》、《建设工程安全生产管理条例》的规定,施工单位应当经建设行政主管部门或者其他有关部门考核合格后方可任职的人员包括()。
商标设计者的人身权受下列选项中的()保护。
期货交易所应当在每季度结束后15个工作日内,缴纳前一季度应当缴纳的期货投资者保障基金。()[2014年3月真题]
1997年7月1日老李晚饭后散步时被人从背后打晕,由于天黑,没有看清对方长相,一直没有找到凶手。2016年8月1日邻居小张酒后说出真相,当年就是他打伤的老李,则老李可以向法院提起诉讼,主张其民事权利的法定期间是()。
陈某是甲自行车厂技术开发科工程师,专门负责新产品研究工作,2003年10月退休。2005年2月,陈某利用过去工作中积累的资料,研究出“减震自行车”,经在乙机械厂试验,效果极佳。2005年5月,乙机械厂生产了50台用于销售,市场反映良好。2005年6月,陈某
赵某因犯罪行为被判处管制一年的刑罚,在此期间,不属于赵某应当遵守的规定的是()。
企业实施蓝海战略的方式有()。
我国纬度最低的省级行政区是______。
春运(Chunyun)是指中国春节前后一段时期里出现的一种高负荷交通运输,一般从春节前15天开始,持续约40天。对大多数中国人来说,在春节期间与家人团聚是一个悠久的传统。人们从工作、读书的地方回到家里,在除夕夜与家人一起吃团圆饭。春运期间的客流量(pass
最新回复
(
0
)