推荐于2016-05-28
展开全部
C++中定义一个字符串类string,并实现加号运算符重载operator+
程序如下:
<文件名:String.h>
#include <string.h>
#include <stdio.h>
/*创建一个字符串类:String*/
class String{
public:
String(const char* str = NULL); //构造函数之一
String(const String& another); //构造函数之二
void input_str(); //字符串输入
String& operator +(const String& rhs); //重载加法运算符
void print(); //字符串输出
private:
char *m_data;
char *addstr;
};
<文件名:String.cpp>
#include <iostream.h>
#include "String.h"
/*构造函数之一*/
String::String(const char* str)
{
if(str == NULL) //如果输入为空字符串,则添加“\0”表示空串。
{
m_data = new char[1];
m_data[0] = '\0';
}
else //如果输入非空串,复制该字符串。
{
m_data = new char[strlen(str) + 1];
strcpy(m_data,str);
}
}
/*构造函数之二*/
String::String(const String& another)
{
m_data = new char[strlen(another.m_data) + 1];
strcpy(m_data,another.m_data);
}
/*输入字符串*/
void String::input_str()
{
char str[256];
printf("请输入字符串:");
cin>>str;
printf("\n");
m_data = new char[strlen(str) + 1];
strcpy(m_data,str);
}
/*连接后的字符串输出*/
void String::print()
{
if(addstr == NULL) printf("No Content!\n");
else
{
for(char *c = addstr; *c != '\0'; c++)
printf("%c", *c);
printf("\n");
}
}
//"+"运算符重载
String& String::operator+(const String& rhs)
{
addstr=new char[strlen(m_data)+strlen(rhs.m_data)+1];
strcpy(addstr,m_data);
strcat(addstr,rhs.m_data);
return *this;
}
<文件名:Str_main.cpp>
#include "String.h"
/*开始演示字符串类*/
void main()
{
String S1;
String S2;
S1.input_str();
S2.input_str();
S1+S2;
S1.print();
}
程序如下:
<文件名:String.h>
#include <string.h>
#include <stdio.h>
/*创建一个字符串类:String*/
class String{
public:
String(const char* str = NULL); //构造函数之一
String(const String& another); //构造函数之二
void input_str(); //字符串输入
String& operator +(const String& rhs); //重载加法运算符
void print(); //字符串输出
private:
char *m_data;
char *addstr;
};
<文件名:String.cpp>
#include <iostream.h>
#include "String.h"
/*构造函数之一*/
String::String(const char* str)
{
if(str == NULL) //如果输入为空字符串,则添加“\0”表示空串。
{
m_data = new char[1];
m_data[0] = '\0';
}
else //如果输入非空串,复制该字符串。
{
m_data = new char[strlen(str) + 1];
strcpy(m_data,str);
}
}
/*构造函数之二*/
String::String(const String& another)
{
m_data = new char[strlen(another.m_data) + 1];
strcpy(m_data,another.m_data);
}
/*输入字符串*/
void String::input_str()
{
char str[256];
printf("请输入字符串:");
cin>>str;
printf("\n");
m_data = new char[strlen(str) + 1];
strcpy(m_data,str);
}
/*连接后的字符串输出*/
void String::print()
{
if(addstr == NULL) printf("No Content!\n");
else
{
for(char *c = addstr; *c != '\0'; c++)
printf("%c", *c);
printf("\n");
}
}
//"+"运算符重载
String& String::operator+(const String& rhs)
{
addstr=new char[strlen(m_data)+strlen(rhs.m_data)+1];
strcpy(addstr,m_data);
strcat(addstr,rhs.m_data);
return *this;
}
<文件名:Str_main.cpp>
#include "String.h"
/*开始演示字符串类*/
void main()
{
String S1;
String S2;
S1.input_str();
S2.input_str();
S1+S2;
S1.print();
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询