オーバーロードされた関数のいずれかが親で宣言されている場合、C++ が子の祖父母のオーバーロードされた関数へのアクセスを許可しない理由を理解する必要があります。次の例を検討してください。
class grandparent{
public:
void foo();
void foo(int);
void test();
};
class parent : public grandparent{
public:
void foo();
};
class child : public parent{
public:
child(){
//foo(1); //not accessible
test(); //accessible
}
};
ここで、2 つの関数 foo() と foo(int) は、Grandparent でオーバーロードされた関数です。ただし、foo() は Parent で宣言されているため、foo(int) にはアクセスできません (宣言されているのが public、private、または protected のいずれであってもかまいません)。ただし、test() はアクセス可能であり、OOP に従って正しいです。
この動作の理由を知る必要があります。