您的位置:首页 > 其它

在多继承的时候,如果一个类继承同时继承自class A和class B,而class A和B中都有一个函数叫foo(),如何明确的在子类中指出override哪个父类的foo()?

2014-12-23 17:09 746 查看

首先,foo在A,B总应该都是虚函数,否则就直接覆盖了,就没有这个问题了;其次,这个问题从语法角度来看似乎是无法解决。因为我们不能改原有设计(不然也没这个问题了:)),所有只好从extend来考虑:

class A
{
public:
	virtual void foo(){ cout << "A" << endl; }
};

class B
{
public:
	virtual void foo(){ cout << "B" << endl; }
};

class EA:public A
{
public:
	virtual void foo(){ fooA(); }

private:
	virtual void fooA() = 0;

};

class EB : public B
{
public:
	virtual void foo(){ fooB(); }

private:
	virtual void fooB() = 0;
};

class AB : public EA, public EB
{
private:
	virtual void fooA(){ cout << "AB A" << endl; }
	virtual void fooB(){ cout << "AB B" << endl; }
};

int _tmain(int argc, _TCHAR* argv[])
{
	AB* pab = new AB();
	EA* pea = pab;
	EB* peb = pab;
	pea->foo();
	peb->foo();
	return 0;
}

输出:

AB A

AB B
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐