1

我无法通过运算符重载连接两个字符串。代码如下。

  #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("%s\n",len);
     t.setData(len);
     t.extend(strlen(len)+strlen(x.len));
     strcat(t.len,x.len);
     printf("%s\n",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("%s\n",len);
    }
  int main()
  {

    String a=String("United ");
    String b,c;
    b.setData("States");
    c=a+b;
    c.display();
    system("pause");
    return 0;
   }                                       

问题是字符串在运算符重载函数内部被连接,但是当返回对象并调用显示函数时,输出是垃圾值。

4

4 回答 4

4

您的代码不遵循Rule Of Three。您应该手动重载复制构造函数和赋值运算符。此外,您不应该delete在由malloc//分配的缓冲区上使用calloc,而是realloc使用free

于 2013-09-04T09:56:36.533 回答
2

利用

<string> 

这是 C++ 库代替

<string.h> 

这是交流图书馆。

于 2014-10-24T07:53:06.680 回答
0

能够弄清楚出了什么问题,析构函数的定义就像一个bugaboo。一旦操作符函数超出范围,就会调用析构函数并销毁对象。

于 2013-09-05T03:07:37.513 回答
-1

这段代码在这里应该可以正常工作。我知道它晚了,但仍然。

#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<<"\n\ns1 = "<<s1;
    cout<<"\n\ns2 = "<<s2;

    cout<<"\n\ns1 + s2 = "<<s3;

    getch();
    return 0;
}
于 2015-05-26T19:54:42.077 回答