[英]Inherited operator= not working?
我在結構EqualTestBase
上重載了operator=
,並且operator=
接受了與用於構造該結構不同的參數。
struct EqualTestBase
{
EqualTestBase(int one) {}
EqualTestBase& operator=(std::string two)
{
//stuff
return *this;
}
};
它在基類上運行良好。 但是從它派生的普通結構EqualTestDerived
行為就像它沒有operator=
成員函數。
struct EqualTestDerived : public EqualTestBase
{
EqualTestDerived(int one) : EqualTestBase(one) {}
};
void test()
{
EqualTestBase basetest(0);
basetest = "test"; //this is fine, compiles
EqualTestDerived derivedtest(0);
derivedtest = "test"; //this does not compile, says there is no constructor that takes type const char[5]
}
是否必須在所有派生結構上重新定義operator=
,還是有辦法自動傳遞該功能?
派生類具有一個隱式聲明的copy-assignment運算符,該運算符將隱藏在基類中聲明的那個。 您可以使用using
將其納入范圍:
struct EqualTestDerived : public EqualTestBase
{
EqualTestDerived(int one) : EqualTestBase(one) {}
using EqualTestBase::operator=;
};
operator=
不繼承。 如果一個類沒有定義operator=
本身,則編譯器將為其合成一個(不管其基類確實定義了operator=
)。
如果您希望某些東西可以被繼承(並且可以是虛擬的),則通常需要將其定義為具有不同名稱的函數。 這種函數的通用名稱是clone
(盡管clone通常更像是復制構造函數,它創建對象的新實例,而不僅僅是分配給現有實例)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.