我想知道如何在此连接过程中调用复制构造函数。 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;
}
答案 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 );
^^^^^