Mic*_*Mic 7 c++ methods inheritance overloading class
我有这个代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误:
error: invalid conversion from 'int' to 'const char*' [-fpermissive]
Run Code Online (Sandbox Code Playgroud)
这意味着它试图在不考虑继承过载的情况下调用B的Print.但是,A的打印应该可以由B实例调用.事实上,如果我将呼叫改为
bInstance.A::Print(1);
Run Code Online (Sandbox Code Playgroud)
然后它编译没有任何错误,但我想避免每次都要编写类范围操作符.有没有办法告诉编译器我试图调用基类的函数重载?
And*_*owl 12
在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;}
};
Run Code Online (Sandbox Code Playgroud)
以下是在必要的修改后代码工作的实例.