2015-05-26 2 views
0

Я хотел знать, как здесь вызывать конструктор копирования в этом процессе конкатенации. S3 = s1 + s2; должен иметь возможность вызвать конструктор копирования и назначить его s3. Возможно ли это? Если да, пожалуйста, помогите мне здесь. БлагодаряИспользование C++ Copy Constructor для конкатенации строк

#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

Путь s1 = s2 называет конструктор копирования, выражение Строка s3 = s1 + s2; Должен также иметь возможность вызвать конструктор копирования. Если вы знаете, как это сделать, пожалуйста, помогите. – user3386500

ответ

0

Прежде всего определить конструктор по умолчанию, как

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

Что касается копии конструктора, то он должен быть объявлен как

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

В этом случае вы можете создать новые объекты временных объектов.

Также я бы определил этот конструктор String (обугленные сек []) { STRCPY (х, с); }

следующим образом

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

Этот оператор также должен иметь второй параметр спецификатора сопзЬ

friend ostream & operator << (ostream & x, const String & s); 
              ^^^^^ 
+0

Я знаю синтаксис для него, но каждый раз его выполнял перегруженный + удар и выполнял. Могу ли я сделать вызов для копирования конструктора. Это хорошо? string1 (const string1 & s1, const string1 & s2) { strcpy (имя, strcat (s1.name, s2.name)); } – user3386500

+1

@ user3386500 Это не конструктор копирования. Это конструктор с двумя параметрами. –

+0

Итак, как можно вызвать конструктор копирования с параметром s1 + s2? Является ли это возможным? – user3386500