我想了解在代码中调用构造函数的时间和位置。为什么在这里调用转换构造函数
我做我自己,虽然简单,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