设有类定义如下:
#define MAXLENGTH 1000
class CString
{
char m_buff[MAXLENGTH];
public:
CString(); //构造函数1,设置为空字符串
CString(char *src); //构造函数2,在考虑了src的长度是否合法后初始化当
前对象
CString(char ch); //构造函数3,0号元素赋值为ch
int setString(char *src); //设置字符串,在考虑了src的长度是否合法后设置当前
对象
friend ostream& operator<<(ostream& Out, const CString& S); //输出字
符串
};
请编写程序实现如下功能:
为其中的每个成员函数给出实现代码;
重载下标运算符[ ],使得可以通过[ ]访问数组的指定元素;
自行根据需要决定是否需要添加拷贝构造函数和析构函数;
main 函数要求如下,不允许修改:
void main()
{
CString s1;
cout<<s1;
s1.setString("abc1");
cout<<s1;
CString s2("abc2");
cout<<s2;
CString s3('a');
cout<<s3;
CString s4(s2);
cout<<s4;
}
/*=======================================================
*学号:
*作业:E14
*功能:请编写程序实现如下功能:
(1)为其中的每个成员函数给出实现代码;
(2)重载下标运算符[ ],使得可以通过[ ]访问数组的指定元素;
(3)自行根据需要决定是否需要添加拷贝构造函数和析构函数
*作者:
*日期:2016.5.15
*========================================================*/
#include<iostream>
#define MAXLENGTH 1000
using namespace std;
class CString
{
char m_buff[MAXLENGTH];
public:
CString() //构造函数1,设置为空字符串
{
m_buff[0]='\0';
}
CString(char *src); //构造函数2,在考虑了src的长度是否合法后初始化当前对象
CString(char ch); //构造函数3,0号元素赋值为ch
int setString(char *src); //设置字符串,在考虑了src的长度是否合法后设置当前对象
friend ostream& operator<<(ostream& Out,const CString& S);//输出字符串
char operator[](int i)const
{
return m_buff[i];
}
};
CString::CString(char *src) //构造函数2,在考虑了src的长度是否合法后初始化当前对象
{
if(strlen(src)>MAXLENGTH) //判断长度是否合法
{
cout<<"输入字符串的长度不合法!"<<endl;
exit(0);
}
else
{
strcpy(m_buff,src); //初始化当前对象
}
}
CString::CString(char ch)
{
m_buff[0]=ch;
m_buff[1]='\0';
}
int CString::setString(char *src) //设置字符串,在考虑了src的长度是否合法后设置当前对象
{
if(strlen(src)>MAXLENGTH) //判断长度是否合法
{
cout<<"输入字符串的长度不合法!"<<endl;
return -1;
}
else
{
strcpy(m_buff,src);
return 1;
}
}
ostream& operator<<(ostream& Out,const CString& S) //输出字符串
{
return Out<<S.m_buff<<endl;
}
void main() //测试主函数
{
CString s1;
cout<<s1;
s1.setString("abc1");
cout<<s1;
CString s2("abc2");
cout<<s2;
CString s3('a');
cout<<s3;
CString s4(s2);
cout<<s4;
}