2016-09-10 5 views
-2

Angenommen, ich habe drei Klassen A, B und C. Klasse B erbt von Klasse A und die Vererbung ist privat, während Klasse C von B erbt und die Vererbung öffentlich ist. Jetzt hat Klasse A eine geschützte Funktion, auf die Klasse C zugreifen möchte. Also, was in der Klasse B durchgeführt werden muß, um die geschützte Funktion zur Klasse C zur Verfügung zu stellenC++ Multilevel-Vererbung, Polymorphie

Hier ist der Link zum Code: http://pastebin.com/9E2sLZzj

+1

Wenn Sie es noch nicht getan haben, dann bitte nehmen Sie sich etwas Zeit, [die Hilfeseiten] (http://stackoverflow.com/help) zu lesen, besonders die Abschnitte mit dem Namen ["Welche Themen kann ich fragen etwa hier? "] (http://stackoverflow.com/help/on-topic) und ["Welche Art von Fragen sollte ich vermeiden zu fragen?"] (http://stackoverflow.com/help/dont-ask). Lesen Sie auch, wie Sie gute Fragen stellen können (http://stackoverflow.com/help/how-to-ask) und erfahren Sie, wie Sie ein [minimales, vollständiges und verifizierbares Beispiel] erstellen können (http: // stackoverflow .com/hilfe/mcve). –

+0

Wenn 'B' privat von' A' erbt, werden die geschützten Mitglieder von 'A' in' B' privat. Sobald 'C' von 'A' erbt, möchten Sie auf dieses private Mitglied zugreifen einen Weg zu finden, um auf private Mitglieder von einer Unterklasse zuzugreifen, von der ich nicht denke, dass sie verfügbar ist und selbst wenn sie verfügbar ist, ist keine gute Idee. –

Antwort

0

Der „Verwendung“ keyword macht ein Mitglied einer vererbten Klasse sichtbar, und auflösbar, im Rahmen seiner Unterklasse. Also, um das Privat geerbt Mitglied zur Verfügung B ‚s Subklassen:

class A { 

protected: 

    void foo() {} 
}; 

class B : private A { 

protected: 

    using A::foo; 
}; 

class C : public B { 

    void bar() 
    { 
     foo(); 
    } 
}; 
+1

Code nur antworten? Bitte erläutern Sie es –

+0

Klasse 'C' erbt von' A', während das OP möchte 'C' von' B' zu erben –

0

Okay, ich die Lösung Dieses Codefragment arbeitete bekam, nachdem er in der Klasse B. Einfügen

int get(){ 
    return A::get(); 
} 

nicht sicher, was Es tut zwar