English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questo articolo, imparerai a utilizzare l'ereditarietà pubblica, protetta e privata in C++. Imparerai attraverso esempi dove e come utilizzarla.
Puoi dichiarare una classe deriva da una classe base con diversi specificatori di accesso.classecioè pubblicaEreditarietàereditarietà protetta o ereditarietà privata.
#include <iostream> using namespace std; class base { .... ... .... }; class derived : access_specifier base { .... ... .... };
Attenzione:È possibile utilizzare le parole chiave public, protected o private al posto dell'access_specifier utilizzato nel codice sopra:Specificatore di accesso)termini.
La classe deriva può accedere a tutti i membri non privati della classe base. Pertanto, se si desidera che i membri della classe base non vengano acceduti dai membri delle funzioni della classe deriva, devono essere dichiarati come private nella classe base.
Possiamo riassumere diversi tipi di accesso in base ai permessi di accesso, come indicato di seguito:
Accesso | public | protected | private |
---|---|---|---|
Stessa classe | yes | yes | yes |
Sottoclasse | yes | yes | no |
Classi esterne | yes | no | no |
Una sottoclasse herita tutti i metodi delle classi base, eccetto i seguenti casi:
Costruttori, distruttori e costruttori di copia della classe base.
Operatori sovraccaricati della classe base.
funzioni amiche della classe base.
Quando una classe deriva da una classe base, la classe base può essere ereditata come public、protected o private tipi. Il tipo di ereditarietà è specificato dal modulo di accesso access-specifier spiegato sopra.
Non usiamo quasi protected o private Ereditarietà, di solito si utilizza public Ereditarietà. Quando si utilizzano diversi tipi di ereditarietà, seguire le seguenti regole:
Ereditarietà pubblica(public):Quando una classe deriva daPubblicodella classe basePubblicomembri sono anchePubblicomembri, i membriProtezionemembri sono ancheProtezionemembri, i membriPrivatoI membri non possono essere direttamente acceduti dalla sottoclasse, ma possono essere chiamati tramitePubblicoeProtezionemembri per accedervi.
Ereditarietà protetta(protected): Quando una classe deriva daProtezionedella classe basePubblicoeProtezioneI membri diventanoProtezionemembri.
Ereditarietà privata(private):Quando una classe deriva daPrivatodella classe basePubblicoeProtezioneI membri diventanoPrivatomembri.
L'ereditarietà multipla significa che una sottoclasse può avere più classi genitore, ereditando le caratteristiche di più classi genitore.
Un'istanza di classe C++ può ereditare membri da più classi, la sintassi è la seguente:
class <Nome della classe derivata>:<Modo di ereditare 1><Nome della classe base 1>,<Modo di ereditare 2><Nome della classe base 2>,… { <Corpo della classe derivata> };
In cui il modo di ereditare l'access modifier è public、protected o private Di questi, uno viene utilizzato per decorare ogni classe base, e le classi base tra loro sono separate da virgola, come mostrato di seguito. Ora diamo un'occhiata a questo esempio:
#include <iostream> using namespace std; // 基类 Shape class Shape { public: void setWidth(int w) { width = w; } void setHeight(int h) { height = h; } protected: int width; int height; }; // 基类 PaintCost class PaintCost { public: int getCost(int area) { return area * 70; } }; // 派生类 class Rectangle: public Shape, public PaintCost { public: int getArea() { return (width * height); } }; int main(void) { Rettangolo Rect; int area; Rect.setWidth(5); Rect.setHeight(7); area = Rect.getArea(); // Output dell'area dell'oggetto cout << "Area totale: " << Rect.getArea() << endl; // Output della spesa totale cout << "Spesa totale: $" << Rect.getCost(area) << endl; return 0; }
Quando il codice sopra viene compilato ed eseguito, produrrà i seguenti risultati:
Area totale: 35 Spesa totale: $2450