运算符=(double)隐藏在派生类中
operator=(double) hidden in derived class
为什么我的派生类隐藏基类的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=;
在类定义中。
相关文章:
- 从多个模板化基类派生时出现"隐藏重载的虚函数"警告
- 从基调用派生类的隐藏(非虚拟)方法
- static_assert:派生"must"中的某个函数隐藏了Base的类函数
- 基的私有虚函数由派生的私有虚函数隐藏
- 编译器不应该对派生类中隐藏的基本结构的成员变量发出警告吗?
- 在派生类接口中隐藏基类的特定函数
- 为什么在派生隐藏基函数时使用虚函数
- 为什么基类函数没有被同名的派生类函数隐藏
- 在派生类中使用声明并不能隐藏从基类派生的相同函数
- 隐藏在派生类中的虚函数
- 有没有一种聪明的方法可以禁止通过派生类之一隐藏基类的运算符函数
- 隐藏代码以选择接口类的派生类
- 运算符=(double)隐藏在派生类中
- 取消隐藏派生中基类中具有相同名称和不同签名的某些函数
- 如何通过派生类实现等效的类型隐藏
- 多态性和数据隐藏:基类是覆盖还是忽略派生类的访问限制?
- 基类模板成员函数隐藏在派生类中,尽管参数列表不同
- 隐藏在派生类中的成员变量
- CLR 中的派生类是否可以拦截/隐藏父类的方法,同时仍保持智能感知?
- 为什么派生类重载函数隐藏基类函数