运算符重载C++的字符串串联
String concatenation by operator overloading C++
我无法通过运算符重载连接两个字符串。代码如下所示。
#include<iostream>
#include<string.h>
using namespace std;
class String
{
char *len;
public:
String(char *s);
void display();
String(){}
void setData(char *s);
//String(String &x);
~String();
String operator+(String);
void extend(int l);
};
void String::extend(int f)
{
len=(char *)realloc(len,(f+1)*sizeof(char));
}
String String::operator+(String x)
{
String t;
printf("%sn",len);
t.setData(len);
t.extend(strlen(len)+strlen(x.len));
strcat(t.len,x.len);
printf("%sn",t.len);
return (t);
}
String::~String()
{
delete len;
}
void String::setData(char *s)
{
len=(char *)calloc(strlen(s)+1,sizeof(char));
strcpy(len,s);
}
String::String(char *s)
{
len=(char *)calloc(strlen(s)+1,sizeof(char));
strcpy(len,s);
}
void String::display()
{
printf("%sn",len);
}
int main()
{
String a=String("United ");
String b,c;
b.setData("States");
c=a+b;
c.display();
system("pause");
return 0;
}
问题是字符串在运算符重载函数中被连接,但当返回对象并调用显示函数时,输出是垃圾值。
您的代码不遵循规则三。您应该手动重载复制构造函数和赋值运算符。此外,您不能在缓冲区上使用delete
,该缓冲区由malloc
/calloc
/realloc
分配,请使用free
。
使用
<string>
用c++库代替
<string.h>
它是一个c库。
能够找出问题所在,析构函数的定义就像一个错误。一旦运算符函数超出作用域,就会调用析构函数并销毁对象。
此代码在这里应该可以正常工作。我知道已经很晚了,但还是。
#include<iostream.h>
#include<conio.h>
#include<string.h>
class String
{
char x[40];
public:
String() { } // Default Constructor
String( char s[] )
{
strcpy(x,s);
}
String( String & s )
{
strcpy(x,s.x );
}
String operator + ( String s2 )
{
String res;
strcpy( res.x,x );
strcat( res.x,s2.x);
return(res);
}
friend ostream & operator << ( ostream & x,String & s );
};
ostream & operator << ( ostream & x,String & s )
{
x<<s.x;
return(x);
}
int main()
{
clrscr();
String s1="Vtu";
String s2="Belgaum";
String s3 = s1+ s2;
cout<<"nns1 = "<<s1;
cout<<"nns2 = "<<s2;
cout<<"nns1 + s2 = "<<s3;
getch();
return 0;
}
相关文章:
- 重载操作程序时出错>>用于类中的字符串 memebr
- 重载 std::字符串运算符+ 用于打印枚举名称
- C++ |<<运算符重载和打印字符串
- 重载加法运算符(使用函数向对象添加字符串)
- 使用 cout 运算符重载字符串
- 重载输入 (>>) 运算符以获取枚举字符串
- 试图在重载函数中获取字符和字符串的输入
- 字符串文本左值和右值引用的函数重载
- C++ 重载:[错误] 与'operator='不匹配(操作数类型为 'String' 和"字符串")
- 字符串类中的重载 + 运算符
- C++重载字符串 [] 运算符以返回字符串和
- 在命名空间内的类中使用带有运算符重载的字符串流时"no match for ‘operator>>’"
- 重载、常量参数、const_cast、const_cast<字符串 &>
- C++:在 cin 重载中拼接字符串
- C++ 使用链表的自定义字符串类中的重载 + 运算符
- 重载运算符<<,os得到一个字符串
- ifstream gcount在getline字符串重载时返回0
- 使用字符串重载流插入运算符
- 仅对char*和字符串重载函数
- 使用const char*和/或字符串重载运算符=或运算符[]