Ho bisogno di capire perché C++ non consente di accedere a funzioni sovraccaricate di Grandparent in Child se una delle funzioni sovraccariche è dichiarata in Parent. Si consideri il seguente esempio:Funzione sovraccarico di grandparent in child
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
}
};
funzioni Qui, due funzioni foo() e foo (int) sono sovraccarichi in Nonni. Ma foo (int) non è accessibile poiché foo() è dichiarato in Parent (non importa se è dichiarato pubblico o privato o protetto). Tuttavia, test() è accessibile, il che è corretto secondo OOP.
Ho bisogno di conoscere il motivo di questo comportamento.
C'è un motivo per cui questo comportamento è una buona cosa? (es. ** perché ** come per quale motivo, al contrario di * perché * come in quello che lo causa) –
@SanjayManohar l'unico uso che vedo sarebbe quello di prevenire gli errori - cioè pensare che tu stia chiamando un metodo da genitore e in realtà chiamando un metodo da nonno, perché hai sbagliato a digitare un parametro. E puoi aggirarlo con la direttiva 'using'. –
@SanjayManohar vedi http://stackoverflow.com/questions/4837399/c-rationale-behind-hiding-rule –