我在结构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=;
};