调用基类的重载方法
Calling base class's overloaded method
我有这样的代码:
#include <iostream>
#include <string>
using namespace std;
class A {
public: void Print(int i) {cout<<i;}
};
class B : public A {
public: void Print(string s) {cout<<s;}
};
int main() {
B bInstance;
bInstance.Print(1);
return 0;
}
这给我一个错误:
error: invalid conversion from 'int' to 'const char*' [-fpermissive]
意味着它试图调用B的Print而不考虑继承的重载。但是,A的Print应该可以被B实例调用。实际上,如果我将调用改为
bInstance.A::Print(1);
则编译时不会出现任何错误,但我希望避免每次都必须编写类作用域操作符。是否有一种方法告诉编译器我试图调用基类的函数的重载?
子类中的Print()
成员函数隐藏了超类的Print()
成员函数。因此,编译器将看不到A::Print()
,并将尝试调用B::Print()
,并抱怨int
无法转换为字符串。
要将A::Print()
引入重载集,可以引入using
声明:
class A {
public:
void Print(int i) {cout<<i;}
};
class B : public A {
public:
using A::Print;
// ^^^^^^^^^^^^^^^
void Print(string s) {cout<<s;}
};
相关文章:
- C++:涉及继承和"using"时的方法重载
- 如何让编译器在C++中更喜欢常量方法重载?
- 为什么方法重载或枚举标志定义会触发 gcc7.2 编译器警告?
- C++模板方法重载和具有多态性的类访问
- 基于方法重载类
- 方法重载 C++ -> 只有一个方法调用
- 如何使用 SFINAE 禁用方法重载集?
- 使用类别方法重载 NSDecimalNumber 上的算术运算符
- C++继承和方法重载混淆
- 多态性和方法重载在C++中几乎是一样的
- 了解方法重载规则
- c++编译错误涉及方法重载的2个模板函数
- Qt/Qml 和方法重载
- 参数或方法重载的幻数
- 为什么C++更喜欢这个模板方法而不是方法重载
- C++方法重载
- 在C++中使用非友元方法重载 I/O 运算符 |&istream 和 &ostream 函数
- 插入方法重载
- 函数重载和方法重载之间的区别
- 正在解决跨基类的虚拟方法重载