多重継承でオーバーロード?
下のようなコードが通るのを知らなかった。
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が同名で同じ引数を取る関数を持っていると、どっちの関数を呼び出しているのか判断できないので、明示的に指定する必要があるのは知っていたんだけど、引数が違うときの挙動は知らなかった。
どうみても、曖昧さはないと思うけど、コンパイラが頑張ってくれないのだと思っていた。
この状態はオーバーロードではなく、通常の継承って解釈でいいんだろうか?
調べ方がわからないな。