Life, Education, Death

プログラミング以外でも思ったことをつらつらと書きたい

多重継承でオーバーロード?

下のようなコードが通るのを知らなかった。

class HogeA{
public:
	virtual void Foo( int x ) = 0;
};

class HogeB{
public:
	virtual void Foo( int x, int y ) = 0;
};

class TestC : public HogeA, HogeB{
public:
	void Foo( int x )
	{
		std::cout << x << std::endl;
	}

	void Foo( int x, int y )
	{
		std::cout << x << y << std::endl;
	}
};

int _tmain(int argc, _TCHAR* argv[])
{
	HogeC hogeC;
	hogeC.Foo( 100 );
	hogeC.Foo( 100, 200 );
	return 0;
}


多重継承って混乱するから、全然使っていない。例えば、HogeAとHogeBが同名で同じ引数を取る関数を持っていると、どっちの関数を呼び出しているのか判断できないので、明示的に指定する必要があるのは知っていたんだけど、引数が違うときの挙動は知らなかった。


どうみても、曖昧さはないと思うけど、コンパイラが頑張ってくれないのだと思っていた。
この状態はオーバーロードではなく、通常の継承って解釈でいいんだろうか?
調べ方がわからないな。