なぜなら、オーバーロードされた関数のいずれかが親で宣言されていると、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
}
};
ここでは、foo()とfoo(int)の2つの関数がGrandparentの関数にオーバーロードされています。しかし、foo()はParentで宣言されているので、foo(int)にはアクセスできません(publicまたはprivateまたはprotectedであると宣言しても問題ありません)。しかし、test()はアクセス可能です。これはOOPの通りです。
この動作の理由を知る必要があります。
この動作が良い理由はありますか? (つまり、理由は何ですか?理由は何ですか?理由は何ですか?) –
@SanjayManohar私が見る唯一の使用は、間違いを防ぐことです。つまり、あなたは親からメソッドを呼び出すと思っています。実際には、祖父母からメソッドを呼び出すことになります。そして 'using'ディレクティブでそれを回ることができます。 –
@SanjayManohar参照http://stackoverflow.com/questions/4837399/c-rationale-behind-hiding-rule –