Ich muss verstehen, warum C++ nicht zu Grandparent überladenen Funktionen in Child zugreifen, wenn eine der überladenen Funktion in Parent deklariert ist. Betrachten Sie das folgende Beispiel:Grandparent überladene Funktion in Kind
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
}
};
Hier sind zwei Funktionen foo() und foo (int) sind überladene Funktionen in Großeltern. Aber foo (int) ist nicht zugänglich, da foo() in Parent deklariert wird (egal, ob es öffentlich oder privat oder geschützt ist). Allerdings ist test() zugänglich, was gemäß OOP richtig ist.
Ich muss den Grund für dieses Verhalten kennen.
Gibt es einen Grund, warum dieses Verhalten eine gute Sache ist? (dh ** warum ** wie in aus welchem Grund, im Gegensatz zu * warum * wie in dem, was es verursacht) –
@SanjayManohar die einzige Verwendung, die ich sehe, wäre Fehler zu verhindern - dh zu denken, Sie rufen eine Methode von Eltern und eine Methode von Großeltern aufrufen, weil Sie einen Parameter falsch eingegeben haben. Und Sie können es mit der 'using'-Direktive umgehen. –
@SanjayManohar siehe http://stackoverflow.com/questions/4837399/c-rationale-behind-hiding-rule –