2017-07-14 2 views
-6

Ich löste einige grundlegende Vererbungsfrage. Ich bin auf etwas gestoßen, dass ich die Logik nicht verstehe. Wenn ich die abgeleitete Klasse von der Basisklasse als privat erwerbe, kann ich sogar auf die öffentlichen Mitglieder der Basisklasse zugreifen. Hier ist mein Code,Unterschied mit öffentlichen, privaten und geschützten

#include <iostream> 

struct Shape 
{ 
    virtual void print() 
    { 
    std::cout << "SHAPE" << std::endl; 
    } 
    virtual ~Shape() {} 
}; 

struct Box : private Shape 
{ 
    virtual void print() 
    { 
    std::cout << "BOX" << std::endl; 
    } 
}; 

int main(int argc, char** argv) 
{ 
    Shape* s = new Box; //illformed ? can't access the public members of the base. 

    s->print(); 

    delete s; 

    return 0; 
} 
+5

Fragen Sie Ihren Lehrer, lesen Sie Bücher –

+0

Ihr C++ - Compiler ist kaputt. gcc 7.1.1 gibt eine Diagnose korrekt aus und kann den Code nicht kompilieren: 'error: 'Shape' ist eine unzugängliche Basis von 'Box'' –

+0

Es bedeutet also, wenn ich als Privat erben, kann shape nicht auf Box zugreifen. Ja? Ähnlich wie wo wir nicht auf die privaten Mitglieder außerhalb der Klasse zugreifen können. – Bob11

Antwort

0

Nein, Sie sollten nicht in der Lage sein, die öffentlichen Member einer Basisklasse zuzugreifen, die als privat vererbt wird, sonst ist der Zweck der privaten Erbschaft wäre sinnlos. Sie sollten nicht einmal einen Zeiger vom Typ Box* einer Variablen vom Typ Shape* zuordnen können. Wenn Ihr Compiler den Code verarbeitet und die Binärdatei "SHAPE" statt "BOX" ausgibt, ist Ihr Compiler tatsächlich defekt.

+0

Oaky. Ich verstehe es jetzt. Vielen Dank @Murphy für die Erklärung. Es macht Sinn, ja. – Bob11

Verwandte Themen