Zhi*_*gor 11 c++ inheritance abstract-class overriding overloading
我有以下代码:
struct Abs {
virtual void f(int x) = 0;
virtual void f(double x) final { std::cout << 2; }
};
struct Sub: public Abs {
void f(int x) final { std::cout << 1; }
};
Run Code Online (Sandbox Code Playgroud)
Abs是一个抽象类,由纯成员函数void f(int)及其重载版本组成void f(double x),该版本不再是纯成员函数final。如果我尝试void f(int)在派生结构中重写Sub,它会隐藏并打印void f(double)以下函数,转换为:main11.01int
int main() {
Sub x = {};
x.f(1.01);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我该如何克服这个问题?另外,为什么会这样呢?
son*_*yao 10
给定,在 class 的范围内找到x.f(1.01);名称,然后名称查找停止;的范围不会被审查。仅放入重载集中,然后执行重载决策。fSubAbsSub::f
...名称查找按如下所述检查范围,直到找到至少一个任何类型的声明,此时查找停止并且不再检查进一步的范围。
您可以使用引入intousing的名称,然后也可以找到并参与重载解析。AbsSubAbs::f
struct Sub: public Abs {
using Abs::f;
void f(int x) final { std::cout << 1; }
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
552 次 |
| 最近记录: |