簡體   English   中英

繼承的operator =不起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM