operator =(double)隐藏在派生类中

时间:2014-11-02 22:30:40

标签: c++

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

2 个答案:

答案 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=;

在课堂定义中。