


[C++] Vertiefendes Verständnis der Grundkenntnisse der Vererbung und ihrer Beziehung zu Zugriffsqualifizierern
Die Beziehung zwischen Vererbungsmethoden und Zugriffsqualifizierern
Drei Vererbungsmethoden:
Öffentliche Vererbung
Private Vererbung
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:
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.
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 .
Konstruktor
Kopierkonstruktor
Destruktor
Zuweisungsoperator überlastet
Adressoperator überlastet
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
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:
Lösung: virtuelle Vererbung
im Diamant Fügen Sie virtuell
zur zweiten Ebene hinzu. Beispiel:
Verwandte Artikel:
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



In der C -Sprache werden Sonderzeichen durch Escape -Sequenzen verarbeitet, wie z. B.: \ n repräsentiert Linienbrüche. \ t bedeutet tab charakter. Verwenden Sie Escape -Sequenzen oder Zeichenkonstanten, um Sonderzeichen darzustellen, wie z. B. char c = '\ n'. Beachten Sie, dass der Backslash zweimal entkommen muss. Verschiedene Plattformen und Compiler haben möglicherweise unterschiedliche Fluchtsequenzen. Bitte wenden Sie sich an die Dokumentation.

Die Nutzungsmethoden von Symbolen in der C-Sprachabdeckung Arithmetik, Zuordnung, Bedingungen, Logik, Bitoperatoren usw. werden für grundlegende mathematische Operationen verwendet, Zuordnungsoperatoren werden zur Zuordnung und Addition verwendet, Subtraktion, Multiplikationszuordnung und Abteilungszuweisung, Zustandsbetreiber werden für Unterschiede verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Zeiger, Markierungen am Ende der Datei und nicht numerische Werte.

In C wird der Zeichenentyp in Saiten verwendet: 1. Speichern Sie ein einzelnes Zeichen; 2. Verwenden Sie ein Array, um eine Zeichenfolge darzustellen und mit einem Null -Terminator zu enden. 3. Durch eine Saitenbetriebsfunktion arbeiten; 4. Lesen oder geben Sie eine Zeichenfolge von der Tastatur aus.

Der Unterschied zwischen Multithreading und Asynchron besteht darin, dass Multithreading gleichzeitig mehrere Threads ausführt, während asynchron Operationen ausführt, ohne den aktuellen Thread zu blockieren. Multithreading wird für rechenintensive Aufgaben verwendet, während asynchron für die Benutzerinteraktion verwendet wird. Der Vorteil des Multi-Threading besteht darin, die Rechenleistung zu verbessern, während der Vorteil von Asynchron nicht darin besteht, UI-Threads zu blockieren. Die Auswahl von Multithreading oder Asynchron ist von der Art der Aufgabe abhängt: Berechnungsintensive Aufgaben verwenden Multithreading, Aufgaben, die mit externen Ressourcen interagieren und die UI-Reaktionsfähigkeit asynchron verwenden müssen.

In der C -Sprache kann die char -Typ -Konvertierung direkt in einen anderen Typ konvertiert werden, wenn: Casting: Verwenden von Casting -Zeichen. Automatische Konvertierung des Typs: Wenn ein Datentyp einen anderen Werttyp berücksichtigen kann, wandelt der Compiler diese automatisch um.

Das Char -Array speichert Zeichensequenzen in der C -Sprache und wird als char Array_name [Größe] deklariert. Das Zugriffselement wird durch den Einweisoperator weitergeleitet, und das Element endet mit dem Null -Terminator '\ 0', der den Endpunkt der Zeichenfolge darstellt. Die C -Sprache bietet eine Vielzahl von String -Manipulationsfunktionen wie Strlen (), Strcpy (), Strcat () und strcmp ().

In der C -Sprache ist der Hauptunterschied zwischen char und wchar_t die Zeichencodierung: char verwendet ASCII oder erweitert ASCII, wchar_t Unicode; char nimmt 1-2 Bytes auf, wchar_t nimmt 2-4 Bytes auf; char ist für englischen Text geeignet. Wchar_t ist für mehrsprachige Text geeignet. char ist weithin unterstützt, wchar_t hängt davon ab, ob der Compiler und das Betriebssystem Unicode unterstützen. char ist in der Charakterbereich begrenzt, WCHAR_T hat einen größeren Charakterbereich und spezielle Funktionen werden für arithmetische Operationen verwendet.

Es gibt keine integrierte Summenfunktion in der C-Sprache, daher muss sie selbst geschrieben werden. Die Summe kann erreicht werden, indem das Array durchquert und Elemente akkumulieren: Schleifenversion: Die Summe wird für die Schleifen- und Arraylänge berechnet. Zeigerversion: Verwenden Sie Zeiger, um auf Array-Elemente zu verweisen, und eine effiziente Summierung wird durch Selbststillstandszeiger erzielt. Dynamisch Array -Array -Version zuweisen: Zuordnen Sie Arrays dynamisch und verwalten Sie selbst den Speicher selbst, um sicherzustellen, dass der zugewiesene Speicher befreit wird, um Speicherlecks zu verhindern.
