C++运算符继承和重载
C++ operator inheritance and overloading
我有一个基类a和一个派生类B。a和B都定义[]运算符,但参数类型不同。尽管如此,当我尝试在带有A的B类型对象上使用[]运算符时,C++找不到A对此的定义。很烦人。规则是什么?
类B中的运算符隐藏类A中的运算符。这是派生类中定义的重载超类中方法的任何方法的问题。如果名称查找在B
中找到名称匹配,则不会在A
中查找,即使无法调用在B
中找到的匹配。
你需要把它纳入B:的范围
class X{};
class Y{};
class A {
public:
auto operator[](X) {};
};
class B : public A {
public:
using A::operator[]; // <-- you need this
auto operator[](Y){};
};
int main() {
A a;
B b;
b[X{}]; // OK
b[Y{}]; // OK
}
相关文章:
- 继承函数的重载解析
- 重载继承的构造函数
- C++中的函数重载和继承
- C++ 继承:基类中重载 operator+ 的 2 次在派生类中无法正常工作
- 如何调用继承的重载运算符<<并在派生类的输出中添加更多文本?
- 类继承和运算符重载
- 通过继承重载运算符会导致歧义
- 使用继承的指针列表复制构造函数或重载运算符=
- 重载<<无法访问继承的私有数据
- C++:涉及继承和"using"时的方法重载
- C++具有多重继承的构造函数重载解析
- c++ 中的函数重载如何在没有钻石继承的情况下工作?
- 函数不参与继承中的重载解析
- 继承类 C++ 中的重载>>
- 模板和unique_ptr继承情况下的重载解决方案
- 如何将同名的继承函数视为重载函数
- 运算符<<重载继承,为什么我从基类而不是子类获得输入?
- 强制重载继承类的新/删除
- c++ operator =重载继承,是否需要在派生类中重新定义,尽管在基类中定义
- ostream运算符重载-继承