【初心者歓迎】C/C++室 Ver.39【環境依存OK】at TECH【初心者歓迎】C/C++室 Ver.39【環境依存OK】 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト736:デフォルトの名無しさん 07/07/11 01:01:54 どなたかC++に詳しい方、教えてください。今日、はまりました。 以下ClassAに、オーバロードしたfunc()という関数が2つがあるとします。 ClassAを継承したClassBをnewし、classb->func(NUM_2);をコールすると、期待通りに ClassA::func(NUM)がコールされるのですが、(1)だけオーバライドしたClassCを newし、classc->func(NUM_2);をコールするとClassC::func(int, NUM)がコールされて しまいます。 期待した動作はClassA::func(NUM)がコールされる事でした。 これはC++の仕様なのでしょうか。コンパイラがどういう論理でenumを使用した関数の オーバライド/オーバロードを解決しているのかご存知の方、ご教示お願いします。 enum NUM { NUM_1, NUM_2, NUM_3 }; class ClassA { virtual int func(int a, NUM b = NUM_1); // ←(1) virtual int func(NUM a = NUM_1); // ←(2) }; class ClassB : public ClassA { // ClassAの(1),(2)はオーバライドしていないクラス }; class ClassC : public ClassA { // ClassAの(1)だけをオーバライド int func(int a, NUM b = NUM_1); }; 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch