C++中重载超类方法部分版本的办法

有这样一个程序的样例:

#include "iostream"
using namespace std;

class Foo
{
public:
	virtual void overload() {
		cout << "Foo overload" << endl;
	}

	virtual void overload(int i) {
		cout << "Foo overload(" << i << ")" << endl;
	}
};

class Bar: public Foo
{
public:
	// using Foo::overload;
	virtual void overload() {
		cout << "Bar overload" << endl;
	}

	// virtual void overload(int i) {
	// 	cout << "Bar overload(" << i << ")" << endl;
	// }
};

int main(){
	Bar myBar;
	Foo *foo_ptr = &myBar;
	myBar.overload();
	myBar.overload(1);
	foo_ptr->overload();
	foo_ptr->overload(2);
	return 0;
}

试图在Bar对象中调用overload带参数的方法无法编译通过。
通过基类指针强制类型转换才可以使用。

一个方便的重载基类方法部分版本的解决方案是使用关键字using。
调用using Foo::overload覆盖超类所有版本,之后再显式重载部分版本。

Tags :

0 thoughts on “C++中重载超类方法部分版本的办法”

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Click the right image To submit your comment: