Лучшее руководство по наследование C ++ в 2024 году. В этом руководстве вы можете изучить И производный класс базовый класс,Контроль доступа и наследование,Тип наследования,Множественное наследование,
Объектно-ориентированное программирование является наиболее важным понятием наследуется. Наследование позволяет определить класс в другой класс основе, что делает создание и поддержание приложения проще. Для этого, также достиг повторного использования функциональных возможностей кода и улучшить результаты времени выполнения.
Когда вы создаете класс, вам не нужно переписывать новый элементы данных и функции-члены, просто указать новый класс наследует существующего члена класса может быть. Существующий класс называетсябазовым классом, новый класс называется производным классом.
Наследованиеявляется представителем отношений.Например, млекопитающее представляет собой животное, собака является млекопитающим, поэтому, собака это животное, и так далее.
Класс может быть получен из более чем одного класса, что означает, что он может наследовать данные и функции от нескольких базовых классов. Определяет производный класс, мы используем полученный список классов, чтобы указать базовый класс. Класс список вывод к одному или нескольким базовым классом с именем следующей формы:
class derived-class: access-specifier base-class
В котором модификатор доступа доступа к спецификатор являетсяоткрытым, защищенный или частныйхарактер , базовый класс определен перед именем класса. Если нет модификатора доступа доступа к спецификатора, по умолчанию является частным.
Предположим , что у вас есть базовый классShape, Прямоугольникего производных классов, следующим образом :
#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; }
Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:
Total area: 35
Производный класс может получить доступ к базовым классом для всех не-частных членов. Так что если вы хотите быть членом функций-членов базового класса, полученного доступа класса должен быть объявлен в базовом классе является частным.
Мы можем суммировать различные права доступа в соответствии с типом доступа, следующим образом:
访问 | public | protected | private |
---|---|---|---|
同一个类 | yes | yes | yes |
派生类 | yes | yes | no |
外部的类 | yes | no | no |
Производный класс наследует все метод базового класса, за исключением следующих обстоятельств:
Когда класс является производным от базового класса, базовый класс может наследоваться вобщественных местах, защищенные или частныетипы. С помощью приведенного выше объяснения наследуется тип модификатора доступа доступа к спецификатора указать.
Едва ли мы использоватьзащищенное или закрытоенаследование обычно используетсяоткрытоенаследование. Когда различные типы наследования, следуйте следующим правилам:
Множественное наследование, то есть подкласс может иметь более чем один родительский класс, который наследует характеристики более чем одного родительского класса.
Класс C ++ может наследовать более одного класса члена следующий синтаксис:
class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,… { <派生类类体> };
В котором модификатор доступа наследования являетсяпубличным, защищенный или частныйхарактер , используется для украшения каждый базовый класс, базовый класс между отделенных друг от друга запятой, как показано выше. Теперь давайте посмотрим на следующие примеры:
#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; }
Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:
Total area: 35 Total paint cost: $2450