【发布时间】:2013-03-11 11:52:16
【问题描述】:
我有这个代码:
#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);
然后它编译没有任何错误,但我想避免每次都编写类范围运算符。 有没有办法告诉编译器我正在尝试调用基类的函数重载?
【问题讨论】:
-
在搜索
A之前完成了重载解析,因为它在B中找到了一些东西。使用using语句将A引入并让它参与重载决议。 -
如果我可以谦虚地建议重载的有用性有时被高估了。考虑改用不同的名称,例如
void printInt( int i );和void printString( string s );
标签: c++ class inheritance methods overloading