运算符=(double)隐藏在派生类中

operator=(double) hidden in derived class

本文关键字:派生 隐藏 double 运算符      更新时间:2023-10-16

为什么我的派生类隐藏基类的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=而不在派生类中重新定义它?

是的,你可以这样暴露它:

struct derived : public base
{
    using base::operator=;
};

由于隐式生成的operator=(const derived&)隐藏了继承的operator=(double),因此调用失败。

运算符仍然可用,但它是隐藏的。您必须使用指针或对基类的引用来进行虚拟调用:

base *pb = &dv;
pb->operator=( 20.0);
(*pb) = 20.0;

或者,为了使静态调用也能工作,您可以使用using声明将基操作器=带入作用域:

using base::operator=;

在类定义中。