私はC++で書かれたこのコードに出くわしました:
#include<iostream>
using namespace std;
class Base {
public:
virtual int fun(int i) { cout << "Base::fun(int i) called"; }
};
class Derived: public Base {
private:
int fun(int x) { cout << "Derived::fun(int x) called"; }
};
int main()
{
Base *ptr = new Derived;
ptr->fun(10);
return 0;
}
出力:
Derived::fun(int x) called
次の場合:
#include<iostream>
using namespace std;
class Base {
public:
virtual int fun(int i) { }
};
class Derived: public Base {
private:
int fun(int x) { }
};
int main()
{
Derived d;
d.fun(1);
return 0;
}
出力:
Compiler Error.
なぜこれが起こっているのか誰かが説明できますか?最初のケースでは、プライベート関数がオブジェクトを介して呼び出されています。