これは私が試したものです(関数「楽しい」は静的でなければなりません):
#include<iostream>
class A
{
public:
static void fun(double x) { std::cout << "double" << std::endl; }
};
class B
{
public:
static void fun(int y) { std::cout << "int" << std::endl; }
};
class C
:
public A,
public B
{
};
int main(int argc, const char *argv[])
{
double x = 1;
int y = 1;
C::fun(x);
C::fun(y);
return 0;
}
g++ (GCC) 4.8.1 20130725 (プレリリース) を使用すると、次のエラーが発生しました。
main.cpp: In function 'int main(int, const char**)':
main.cpp:27:5: error: reference to 'fun' is ambiguous
C::fun(x);
^
main.cpp:12:21: note: candidates are: static void B::fun(int)
static void fun(int y) { std::cout << "int" << std::endl; }
^
main.cpp:6:21: note: static void A::fun(double)
static void fun(double x) { std::cout << "double" << std::endl;
だから私の質問は:静的関数ではなくメンバー関数をオーバーライドできる場合、C++ にどのように来るのですか? このシナリオで過負荷が機能しないのはなぜですか? コンパイラが名前空間 C:: に「楽しみ」を持ち込んでから、名前マングリングを実行し、オーバーロードを使用して C::fun(int) と C::fun(double) を区別することを期待します。