我在结构operator=上重载了EqualTestBase,并且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=,还是有办法自动传递该功能?

最佳答案

派生类具有一个隐式声明的拷贝分配运算符,该运算符将隐藏在基类中声明的那个。您可以使用using将其纳入范围:

struct EqualTestDerived : public EqualTestBase
{
    EqualTestDerived(int one) : EqualTestBase(one) {}
    using EqualTestBase::operator=;
};

08-17 03:00