2014-11-02 84 views
0

为什么我的派生类隐藏基类的operator=(double),而其他操作符正常工作?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=而无需在派生类中重新定义它?

+1

你主要的必须是返回类型'int',而不是'void'。 – NaCl 2014-11-02 22:35:29

回答

4

是的,你可以这样揭露它:因为隐式生成operator=(const derived&)隐藏继承operator=(double)

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

调用失败。

1

运营商仍然可用,但它是隐藏的。你必须使用指针或基类的引用,使虚拟呼叫:

using base::operator=; 

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

另外,为了使静态调用的工作,以及,你可以使用using声明带来的基础operrator =到范围

类定义。

相关问题