我想了解在代碼中調用構造函數的時間和位置。爲什麼在這裏調用轉換構造函數
我做我自己,雖然簡單,stringclass有這些可能性:
String string1("hello world");
string1 = "Hello march!!!";
關於後者,這兩個構造函數其中爲了叫串級 叫...
converting-constructor
copy-constructor
我能理解爲什麼複製構造函數被調用不是真的爲什麼轉換構造函數被調用?
以下是這兩個構造函數:
轉換構造函數
String::String(const char* ch) : _strPtr(0) {
_strLen = strlen(ch) + 1;
_strPtr = new char[_strLen];
strncpy(_strPtr, ch, _strLen);
_strPtr[_strLen - 1] = '\0';
cout << "konverterings-constructor\n";
}
拷貝構造
String::String(const String& string) {
_strLen = strlen(string._strPtr) + 1; // behöver ingen "djup-kopia" av vektorlängden.
if(string.getString()) {
_strPtr = new char[_strLen];
strncpy(_strPtr, string._strPtr, _strLen);
_strPtr[_strLen - 1] = '\0'; // null-terminering
} else {
_strPtr = 0;
}
cout << "copy-constructor\n";
}
重載賦值運算符的成員函數
String String::operator=(const String& string) {
if (this == &string) { // kontrollera om objektet är lika med sig självt.
return *this;
}
cout << "......\n";
delete [] getString();
_strLen = strlen(string.getString()) + 1;
if(string.getString()) {
_strPtr = new char[getLength()];
strncpy(_strPtr, string.getString(), _strLen);
_strPtr[_strLen - 1] = '\0'; // null-terminering
} else {
_strPtr = 0;
}
return *this;
}
你能解釋一下,你會如何期望這個工作*沒有*調用轉換構造函數? – hvd
您是否實施了賦值運算符?如果是這樣,參數類型是什麼? – kec
好的,轉換是轉換字符串文字。該副本是您分配操作員的返回。你應該通過ref返回。 – kec