1

演算子のオーバーロードによって 2 つの文字列を連結できません。コードを以下に示します。

  #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に従っていません。コピー コンストラクターと代入演算子を手動でオーバーロードする必要があります。また、/ /によって割り当てられたバッファを使用すべきではありません。代わりに使用してください。deletemalloccallocreallocfree

于 2013-09-04T09:56:36.533 に答える
0

何がうまくいかなかったのかを理解することができたので、デストラクタの定義はバガブーとして機能していました. 演算子関数がスコープ外に出るとすぐにデストラクタが呼び出され、オブジェクトが破棄されます。

于 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 に答える