String이라는 클래스를 정의하고 초기화를 위해 = assignment을 사용하여 String 객체를 선언했지만 그 뒤에있는 프로세스에 대해 몇 가지 질문이 있습니다. 결과는 다음과 같다C++ + assign = initialize를 사용하여 사용자 정의 클래스 객체를 선언 할 때 프로세스는 무엇입니까?
class String{
public:
String() :str(""){ cout << "default constructor" << endl; }
String(int n);
String(const char *p);
String(const String &x) :str(x.str)
{
cout << "copy constructor" << endl;
}
String& operator=(const String &x)
{
str = x.str;
cout << "operator =" << endl;
return *this;
}
string getStr() const
{
return str;
}
private:
string str;
};
ostream& operator<<(ostream &o,const String &x)
{
o << x.getStr();
return o;
}
String::String(int n)
{
stringstream ss;
ss << n;
ss >> str;
ss.clear();
ss.str("");
cout << "String(int n)" << endl;
}
String::String(const char *p)
{
str = *p;
}
int _tmain(int argc, _TCHAR* argv[])
{
String s6;
s6 = 10;
cout << s6 << endl;
return 0;
}
:의 코드를 보자
, 이것은 이해할 수있다, 먼저 기본 생성자를 호출, 다음 문자열 : 문자열 (INT의 N) 생성자를 호출 , 마지막으로 통화 복사 할당시. 결과는 다음과 같다
int _tmain(int argc, _TCHAR* argv[])
{
String s6=10;
cout << s6 << endl;
return 0;
}
은 복사 할당을 호출하지 않는 이유를 이해할 수없는
는, 그 뒤에 프로세스는이에 무엇 케이스?
게시 된 코드가 컴파일되지 않습니다. 귀하의 도움에 [MCVE] (http://stackoverflow.com/help/mcve) –