friend
私はそれが継承されていないことを理解しています。クラスがありますParent Person Child
。親と人はお互いの友達です。親には次の保護機能があります。
class Person
{
friend class Parent;
public:
Parent * parent;
}
class Parent
{
friend class Person;
protected:
virtual void Answer() = 0;
}
class Child : public Parent
{
void Answer()
{
std::cout << "Child!" << endl;
}
}
私の質問は、友情が受け継がれていなければ、どうすれば次のことができるのかということです...?(人は親へのポインタを持っています)
Person person;
Child child;
person.parent->Answer();
このChild!の出力がなぜであり、仮想関数にアクセスしようとしたときにランタイムエラーがスローされないのですか?
子の関数がどのように実装されているかについて混乱しており、親の仮想応答関数を呼び出そうとしていると予想されるため、プログラムは実行時にエラーになりません。