次のクラスでは、派生オブジェクトをベース ポインターにアップキャストします。次に、メインから派生した「プライベート」メンバー関数を呼び出すことができます。これはどのように可能ですか?私の推測では、関数を呼び出す (つまり、アクセスする) ことができるかどうかは、L 値 (Base* b) に基づいています。どの関数が呼び出されるかは、仮想であるため R-value(new Derived) に基づいています。誰かが私のためにこれを明確にしてもらえますか?
#include <iostream>
class Base
{
public :
virtual void func1()
{
std::cout<<"Base func1";
}
};
class Derived : public Base
{
private :
void func1()
{
std::cout<<"Derived Func1";
}
};
int main()
{
Base* b = new Derived;
b->func1();
}
私の出力は
Derived func1