Najlepszy samouczek C ++ dziedziczenie W 2024 r. W tym samouczku możesz dowiedzieć się I pochodne klasy bazowej klasy,Kontrola dostępu i dziedziczenie,Rodzaj dziedziczenia,Wielokrotne dziedziczenie,
Programowanie obiektowe jest najważniejsza koncepcja jest dziedziczona. Dziedziczenie pozwala nam zdefiniować klasę na innej podstawie klasy, co sprawia, że tworzenie i utrzymywanie aplikacji łatwiejsze. Aby to zrobić, również osiągnął ponowne wykorzystanie funkcjonalności kodu i poprawić wyniki w czasie wykonywania.
Po utworzeniu klasy, nie trzeba ponownie pisać nowe członków danych i funkcje składowe, wystarczy podać nowa klasa dziedziczy istniejącego członka klasy może być. Istniejąca klasa jest nazywanaklasą bazową, nowa klasa nazywana jest klasa pochodna.
Dziedziczeniejest przedstawicielem związku.Na przykład, jeżeli ssakiem jest zwierzę, pies, jest ssak, w związku z tym, pies jest zwierzę, i tak dalej.
Klasa może pochodzić z więcej niż jednego rodzaju, co oznacza, że może dziedziczyć dane i funkcje z wielu klas bazowych. Definiuje klasę pochodną, używamy listę klasa pochodna określić klasę bazową. Lista Wyprowadzenie klasy do klasy jeden lub więcej bazowej nazwie następującą postać:
class derived-class: access-specifier base-class
Której modyfikator dostępu access-specifier jestpubliczne, chronione czy prywatnyjeden, base-klasa jest zdefiniowana przed nazwą klasy. Jeśli żaden modyfikator dostępu access-specyfikacją, domyślnie jest prywatny.
Załóżmy, że maszKształtklasybazowej,prostokąt jej klas pochodnych, co następuje:
#include <iostream> using namespace std; // 基类 class Shape { public: void setWidth(int w) { width = w; } void setHeight(int h) { height = h; } protected: int width; int height; }; // 派生类 class Rectangle: public Shape { public: int getArea() { return (width * height); } }; int main(void) { Rectangle Rect; Rect.setWidth(5); Rect.setHeight(7); // 输出对象的面积 cout << "Total area: " << Rect.getArea() << endl; return 0; }
Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:
Total area: 35
Klasa pochodna może uzyskać dostęp do klasy bazowej dla wszystkich non-prywatnego członków. Więc jeśli chcesz być członkiem ciągu funkcji składowych klasy bazowej uzyskanego dostępu klasy powinny być zadeklarowane w klasie bazowej jest prywatny.
można podsumować różnych praw dostępu zgodnie z typem dostępu, jak następuje:
访问 | public | protected | private |
---|---|---|---|
同一个类 | yes | yes | yes |
派生类 | yes | yes | no |
外部的类 | yes | no | no |
Klasa pochodna dziedziczy wszystkie metody klasy bazowej, z wyjątkiem następujących przypadków:
Kiedy klasa pochodzi od klasy bazowej, klasa bazowa może być dziedziczona jakopubliczne, chronione lub prywatnetypy. Poprzez powyższe wyjaśnienie jest dziedziczona rodzaj modyfikatora dostępu access-specyfikatorem określić.
Mamy prawie nie używachronione lub prywatnedziedziczenie jest zwykle używany dziedziczeniepubliczne.Jeżeli różne typy dziedziczenia, postępuj zgodnie z następującymi zasadami:
Wielokrotne dziedziczenie to jest podklasą może mieć więcej niż jedną klasę nadrzędną, która dziedziczy właściwości więcej niż jednej klasy nadrzędnej.
Klasa C ++ może dziedziczyć z więcej niż jednego członka klasy następującą składnię:
class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,… { <派生类类体> };
Przy czym dziedziczenie modyfikator dostępu jestpubliczne, chronione czy prywatnyjeden, wykorzystywane do dekoracji każdej klasy podstawowej, klasy bazowej pomiędzy oddzielonych przecinkiem, jak pokazano powyżej. Teraz spójrzmy na poniższych przykładach:
#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) { Rectangle Rect; int area; Rect.setWidth(5); Rect.setHeight(7); area = Rect.getArea(); // 输出对象的面积 cout << "Total area: " << Rect.getArea() << endl; // 输出总花费 cout << "Total paint cost: $" << Rect.getCost(area) << endl; return 0; }
Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:
Total area: 35 Total paint cost: $2450