標題基本上說這一切。我主要想這樣做,以便我可以創建一個可以初始化其他API中的其他函數的參數的對象(比如自定義字符串對象)。下面是我試圖讓一個自定義的整數類工作的一個例子:如何創建可以初始化C++數據類型的類?
#include <iostream>
using namespace std;
class test
{
public:
int member;
test(int i) : member(i) {}
friend int &operator=(int &i, test t);
};
int &operator=(int &i, test t)
{
return (i = t.member);
}
int main()
{
int i;
test t = 90;
cout << (i = t);
return 0;
}
不幸的是,我收到一個錯誤,指出運營商=需要一個成員函數。我理解C++標準的目標是防止賦值運算符的靜態和非成員重載被實現,但是有沒有其他方法可以實現這一點?感謝您的任何幫助/建議!
「[運算符=]確實通過操作數位副本(淺拷貝)一個簡單的位」 ...的操作數是一個陌生的名詞使用......也許成員變量?它爲具有它們的成員調用複製構造函數 - 它們可能不會執行逐點淺拷貝(例如'std :: string')。 Re指針的淺拷貝是危險的:這通常是正確的,但並不總是 - 例如(通常是'const')指向靜態引用數據的指針可以被安全地複製。 –
@Tony:謝謝!我將這一點關於操作數改爲成員。承認,那不是太冗長。我指的是帶有動態內存分配的成員指針最常見的情況,因爲這是超載的默認分配對新手最大的傷害。雖然,你的評論應該有助於破譯閱讀答案的例外,所以謝謝:) –
是的 - 我可以按照你的想法,只是擔心「新手」可能會認爲「任何指針=需要你自己的操作員=」指導方針是更多的規則。這是一個很好的指導方針,正如你所說的幫助新手。動態記憶的另一個危險信號,儘管不是100%相關:例如被指向的對象可能被'main()'中調用的工廠方法返回,並且只在應用程序退出前不久被刪除,而指向它的對象的生命期被「包含」在其中)。乾杯。 –