使用C ++ Copy构造函数进行字符串连接

时间:2015-05-26 19:48:24

标签: c++ string constructor copy concatenation

我想知道如何在此连接过程中调用复制构造函数。 s3 = s1 + s2;应该能够调用复制构造函数并将其分配给s3。它甚至可能吗? 如果有,请在这里帮助我。感谢

#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;      // Should invoke copy constructor to concatenate and assign

    cout<<"\n\ns1 = "<<s1;
    cout<<"\n\ns2 = "<<s2;

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

    getch();
    return 0;
}

1 个答案:

答案 0 :(得分:0)

首先定义默认构造函数,如

String() { x[0] = '\0'; }

对于复制构造函数,它应该声明为

String( const String & );
        ^^^^^     

在这种情况下,您可以从临时对象创建新对象。

我也会定义这个构造函数     字符串(char s [])     {         的strcpy(X,S);     }

以下方式

String( const char s[] )
{
    strncpy( x, s, sizeof( x ) );
    x[sizeof( x ) - 1] = '\0';
}

此运算符还应具有带限定符const

的第二个参数
friend ostream & operator << ( ostream & x, const String & s );
                                            ^^^^^