kok*_*ing 3 c++ inheritance operator-overloading
当一个类只有对其内容的持续访问权限时,我编写了代码,并且该代码由提供相同方法的其他类继承,但可以正常访问其成员.当我尝试通过gcc编译它时,我得到以下错误代码:
error: passing ‘const A’ as ‘this’ argument of ‘void A::operator()()’ discards qualifiers
Run Code Online (Sandbox Code Playgroud)
这里是可编译的示例代码:
#include<stdio.h>
class ConstA {
public:
void operator()() const {
printf("const\n");
}
};
class A : public ConstA {
public:
void operator()() {
printf("non-const\n");
}
};
class B : public A {
};
void f(const A& a) {
a();
}
int main() {
B b;
f(b);
}
Run Code Online (Sandbox Code Playgroud)
编译器尝试在没有const属性的情况下调用方法(operator()),而const方法可以在基本ConstA类中访问.我不知道为什么会出现这种错误.
Xeo*_*Xeo 10
const方法不可访问,基类版本被派生类版本隐藏,这是一个烦人的问题.你需要using ConstA::operator()将它纳入范围A.
class A : public ConstA{
public:
using ConstA::operator();
void operator()(){
printf("non-const\n");
}
};
Run Code Online (Sandbox Code Playgroud)
如需进一步阅读,请查看我的这个问题,这有一些很好的解释.