为什么我的派生类隐藏了基类的operator=(double)
,而其他运算符正常工作?
struct base
{
double d;
virtual double operator=(double v)
{
return d = v;
}
virtual double operator[](int index)
{
return d;
}
};
struct derived : public base
{
};
void main()
{
derived dv;
dv = 20.0; // generates error
dv[0]; // Works
}
是否可以公开operator=
而无需在派生类中重新定义它?
答案 0 :(得分:4)
是的,您可以这样公开:
struct derived : public base
{
using base::operator=;
};
调用失败,因为隐式生成的operator=(const derived&)
隐藏了继承的operator=(double)
。
答案 1 :(得分:1)
操作员仍然可用,但它是隐藏的。您必须使用指针或对基类的引用来进行虚拟调用:
base *pb = &dv;
pb->operator=( 20.0);
(*pb) = 20.0;
或者,为了使静态调用也能正常工作,您可以使用using
声明将base operrator =带到范围:
using base::operator=;
在课堂定义中。