Lassen Sie mich zunächst Ihre Fragen beantworten: Es gibt zwei Standardvererbungsmethoden für abgeleitete Klassen. Verwenden Sie „class“, um eine abgeleitete Klasse zu definieren. Die Standardvererbungsmethode ist „privat“. Verwenden Sie „struct“, um eine abgeleitete Klasse zu definieren. Die Standardvererbungsmethode ist „public“.
Empfohlenes Tutorial: C++-Video-Tutorial
Vererbung ist das zweite Hauptmerkmal der objektorientierten Programmierung Erstellen neuer Klassen basierend auf vorhandenen Klassen. Die neue Klasse kann die Datenelemente und Elementfunktionen der vorhandenen Klasse erben, ihre eigenen eindeutigen Datenelemente und Elementfunktionen hinzufügen und die Elementfunktionen in der vorhandenen Klasse neu definieren. Der Einsatz von Klassenvererbung und -ableitung zur Erzielung einer höheren Wiederverwendbarkeit von Code entspricht den Vorstellungen moderner Softwareentwicklung.
Die C++-Sprache unterstützt sowohl Einzelvererbung als auch Mehrfachvererbung. Einfache Vererbung bedeutet, dass eine abgeleitete Klasse nur von einer Basisklasse erbt. Mehrfachvererbung bedeutet, dass eine abgeleitete Klasse gleichzeitig von zwei oder mehr Basisklassen erbt. Java unterstützt nur die Einzelvererbung.
1. Abgeleitete Klasse
Das Definitionsformat der abgeleiteten Klasse ist wie folgt:
class <派生类名>:[继承方式]<基类名1> [,[继承方式]<基类名2>,...,[继承方式]<基类名n>] { <派生类新增的数据成员和成员函数定义> };
Beschreibung :
(1) Das Schlüsselwort zum Definieren einer abgeleiteten Klasse kann class oder struct sein. Der Unterschied zwischen den beiden ist: Verwenden Sie class, um eine abgeleitete Klasse zu definieren, die Standardvererbungsmethode ist privat, verwenden Sie struct Um eine abgeleitete Klasse zu definieren, ist die Standardvererbungsmethode öffentlich. Die Standardattribute neu hinzugefügter Mitglieder sind ebenfalls Klassen, die privaten Attributen entsprechen, und Strukturen, die öffentlichen Attributen entsprechen.
(2) Die beiden Arten von Funktionen, die eine Basisklasse nicht von einer abgeleiteten Klasse erben kann, sind Konstruktoren und Destruktoren.
2. Zugriff auf Attribute von Basisklassenmitgliedern in abgeleiteten Klassen unter 3 Vererbungsmethoden
继承描述符 | 父public成员 | 父protected成员 | 父private成员 |
public | 子public成员 | 子protected成员 | - |
protected | 子protected成员 | 子protected成员 | - |
private | 子private成员 | 子private成员 | - |
Verwenden Sie den folgenden Code, um es kurz zu verstehen:
#include "stdafx.h" #include<iostream> using namespace std; class Base { private: int priData; 9 protected: int proData; public: int pubData; }; class D1:private Base//私有继承 { void f1() { //priData=1;//基类private成员在派生类中不可直接访问 proData=2;//基类的protected成员在派生类中为private访问属性 pubData=3;//基类的public成员在派生类中为private访问属性 } }; class D2:protected Base//保护继承 { void f2() { //priData=1;//基类private成员在派生类中不可直接访问 proData=2;//基类的protected成员在派生类中为protected访问属性 pubData=3;//基类的public成员在派生类中为protected访问属性 } }; class D3:public Base//公有继承 { void f3() { //priData=1;//基类private成员在派生类中不可直接访问 proData=2;//基类的protected成员在派生类中为protected访问属性 pubData=3;//基类的public成员在派生类中为public访问属性 } }; int main() { Base obj; //obj.priData=1;//对象不可访问Base类中private成员 //obj.proData=2;//对象不可访问Base类中protected成员 obj.pubData=3; D1 objD1; //objD1.pubData=3;//private属性,不可访问 D2 objD2; //objD2.pubData=3;//protected属性,不可访问 D3 objD3; objD3.pubData=3;//public属性,可以访问 return 0; }
Obwohl die privaten Mitgliedsfunktionen der Basisklasse in den Mitgliedsfunktionen der abgeleiteten Klasse nicht direkt zugänglich sind, können die Mitgliedsfunktionen der abgeleiteten Klasse indirekt auf diese Mitglieder zugreifen, indem sie die geerbten Funktionen der Basisklasse aufrufen. Wenn eine Funktion der Basisklasse geerbt wird und ein öffentliches Mitglied in der abgeleiteten Klasse bleibt, kann sie direkt über das abgeleitete Klassenobjekt aufgerufen werden.
Werfen wir zunächst einen Blick auf die Zugriffsattribute und Funktionen von Klassenmitgliedern:
访问属性 | 作用 |
private | 只允许该类的成员函数及友元函数访问,不能被其他函数访问 |
protected | 既允许该类的成员函数及友元函数访问,也允许其派生类的成员函数访问 |
public | 既允许该类的成员函数访问,也允许类外部的其他函数访问 |
Nun, verstehen Sie weiterhin durch den Code:
#include "stdafx.h" #include<iostream> using namespace std; class Base { private: int priData; protected: int proData; public: int pubData; //在类的定义中不能对数据成员进行初始化 void SetData()//为基类中的数据成员赋值 { priData=100; proData=200; pubData=300; } void Print() { cout<<"priData="<<priData<<endl; cout<<"proData="<<proData<<endl; cout<<"pubData="<<pubData<<endl; } }; class Derived:public Base { public: void ChangeData() { SetData(); proData=12;//在派生类的成员函数类可以访问基类的非私有成员 } }; int main() { Base b; b.SetData(); b.Print(); Derived d1; d1.ChangeData(); d1.pubData=13; d1.Print(); return 0; }
Die Ergebnisse der Programmausführung lauten wie folgt:
Das obige ist der detaillierte Inhalt vonWas ist die Standardvererbungsmethode für abgeleitete Klassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!