Heim  >  Artikel  >  Backend-Entwicklung  >  [C++] Vertiefendes Verständnis der Grundkenntnisse der Vererbung und ihrer Beziehung zu Zugriffsqualifizierern

[C++] Vertiefendes Verständnis der Grundkenntnisse der Vererbung und ihrer Beziehung zu Zugriffsqualifizierern

php是最好的语言
php是最好的语言Original
2018-07-30 11:32:012745Durchsuche

Die Beziehung zwischen Vererbungsmethoden und Zugriffsqualifizierern

Drei Vererbungsmethoden:

  1. Öffentliche Vererbung

  2. Private Vererbung

  3. Geschützte Vererbung

Beziehung: Wenn die Mitgliedsfunktion der Basisklasse privat ist, werden die privaten Mitglieder der abgeleiteten Klasse zur Basisklassen sind unsichtbar, andere Kriterien sind auf einen kleinen Auswahlbereich für den endgültigen Zugriff beschränkt.

Qualifikationsmerkmal für geschützte Mitglieder: Auf einige Basisklassenmitglieder soll nicht direkt von Objekten der Basisklasse zugegriffen werden, sondern es muss in der abgeleiteten Klasse darauf zugegriffen werden. Sie werden als geschützte Mitglieder definiert. Qualifizierer für geschützte Mitglieder entstehen durch Vererbung.

Verstecken verstehen

Ausblenden bedeutet, dass die Funktion der abgeleiteten Klasse die Basisklassenfunktion mit demselben Namen blockiert. Die Regeln lauten wie folgt:

  1. Wenn die Funktion der abgeleiteten Klasse denselben Namen wie die Funktion der Basisklasse hat, die Parameter jedoch unterschiedlich sind, ist die Funktion zu diesem Zeitpunkt die Die Basisklasse wird unabhängig vom Schlüsselwort virtual ausgeblendet.

  2. Wenn die abgeleitete Klassenfunktion denselben Namen wie die Basisklassenfunktion hat und die Parameter dieselben sind, die Basisklassenfunktion jedoch nicht über das virtuelle Schlüsselwort verfügt, dann wird die Basisklassenfunktion verwendet ist versteckt.

Standard-Memberfunktionen abgeleiteter Klassen

Wenn die sechs Standard-Memberfunktionen nicht explizit in der abgeleiteten Klasse definiert sind, synthetisiert das Kompilierungssystem diese sechs Memberfunktionen standardmäßig .

  1. Konstruktor

  2. Kopierkonstruktor

  3. Destruktor

  4. Zuweisungsoperator überlastet

  5. Adressoperator überlastet

  6. Const-modifizierter Adressoperator überlastet

#include<iostream>
using namespace std;
class person{
  public:
    person(const char* name)
      :_name(name)
    {
      cout<<"person()"<<endl;
    }
    person(const person& p){
      cout<<"person(const person& p)"<<endl;
    }
    person& operator=(const person& p){
      cout<<"person& operator=(const person& p)"<<endl;
      if(this!=&p){
        _name=p._name;
      }
      return *this;
    }
    ~person(){
     cout<<"~person()"<<endl; 
    }
  protected:
    string _name;
};
class student:public person{
  public:
    student(const char* name,int num)
      :person(name)
       ,_num(num){
         cout<<"student()"<<endl;
       }
    student(const student& s)
      :person(s)
       ,_num(s._num)
    {
      cout<<"student(const student& s)"<<endl;
    }
    student& operator=(const student& s){
      cout<<"student& operator=(const student& p)"<<endl;
      if(this!=&s){
        person::operator=(s);//必须指定域,否则会死循环
        _num=s._num;
      }
      return *this;
    }
    ~student(){//析构的时候先清理子类,再清理父类,不需要显示的调用
      cout<<"~student()"<<endl;
    }
  private:
    int _num;
};
int main(){
  student s1("jack",18);
  student s2(s1);
  student s3("rose",16);
  s1=s3;
}

Diamantvererbung

[C++] Vertiefendes Verständnis der Grundkenntnisse der Vererbung und ihrer Beziehung zu Zugriffsqualifizierern

Diamantvererbung weist Mehrdeutigkeits- und Datenredundanzprobleme auf.

Zum Beispiel handelt es sich bei den vererbten Daten in der folgenden Abbildung um zwei Kopien, die jeweils unterschiedlich sind:

[C++] Vertiefendes Verständnis der Grundkenntnisse der Vererbung und ihrer Beziehung zu Zugriffsqualifizierern

Lösung: virtuelle Vererbung

im Diamant Fügen Sie virtuell

zur zweiten Ebene hinzu. Beispiel:

[C++] Vertiefendes Verständnis der Grundkenntnisse der Vererbung und ihrer Beziehung zu Zugriffsqualifizierern

Verwandte Artikel:

Tipps von C# (4): Vererbung

Zusammenstellung von C#-Grundkenntnissen: Grundkenntnisse (2) Klasse

Verwandte Videos:

Qianfeng C-Sprachgrundlagen Video Tutorial

Das obige ist der detaillierte Inhalt von[C++] Vertiefendes Verständnis der Grundkenntnisse der Vererbung und ihrer Beziehung zu Zugriffsqualifizierern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn