35. C++ Виртуальное множественное наследование (ромбовидное наследование)

Виртуальное множественное наследование (ромбовидное наследование) В предыдущей теме (множественное наследование) мы создавали классы студента и работника и наследовали от них класс работающего студента, при этом все поля классов были различными. Представим, что у нас было бы более сложное наследование, например: классы студент и работник наследуются от класса Person (содержащего имя) и от этих классов (студент […]

34. C++ Множественное наследование

Множественное наследование Одной из отличительных особенностей языка C++ является множественное наследование, при таком наследовании класс наследник может получить поля и методы от 2-х и более классов родителей. Рассмотрим на примере: Пусть у нас будут базовые классы студент и работник и класс наследник работающий студент. class Student { public: Student () { this->Name=»Ivan»; this->course=1; } void […]

33. C++ Виртуальный деструктор

Виртуальный деструктор Как известно, указатель на базовый класс является указателем и на классы наследники, а также можно создать объект класса (как переменную) в динамической памяти и присвоить адресу указателю на базовый класс. т.е. class A {//code}; class B : public A {//code}; int main () { A *ptrA=new B; delete ptrA; return 0; } Что […]

32. C++ Интерфейс в ООП

Интерфейс в ООП На основе информации по абстрактным классам, наследованию и тому, что указатель на базовый класс является указателем на классы-наследники вырисовывается еще один из способов использования этих понятий – интерфейс, что это такое: Интерфейс – класс у которого все методы виртуальные, этот класс показывает ВСЕ ДОСТУПНЫЕ методы для работы с подобными классами, т.е. сам […]

31. C++ Абстрактный класс

Абстрактный класс Иногда для логического наследования нельзя создать определенный класс родитель, например: Пусть у нас есть корзина с яблоками, грушами и апельсинами и нам нужно создать классы для описывающие их (в качестве описания просто выведем сбщ. в консоль методом i_called() // я называюсь) Кто тогда будет классом родителем? Наследовать апельсин от яблока – нелогично, равно […]

30. C++ Делегирующие конструкторы

Делегирующие конструкторы Аналогично вызову конструктора базового класса из класса наследника можно принудительно вызывать один конструктор другим внутри ОДНОГО класса: синтаксис такой: Myclass(arg1){//code with arg1} MyClass(arg1, arg2) : Myclass(arg1){//code with arg2} Например: Пусть у нас есть класс employer (работник) class Employer { public: Employer(string Name) { this->Name= Name; this->age= 0; this->position=”нет данных”; //Должность } Employer(string Name, […]

29. C++ Вызов конструктора базового класса из класса – наследника

Вызов конструктора базового класса из класса – наследника Как говорилось ранее при создании класса наследника сначала вызывается конструктор базового класса и лишь потом после создания базового класса вызывается конструктор класса наследника, ранее мы использовали конструктор без параметров (конструктор по умолчанию) для базового класса, но мы можем вызывать и произвольный конструктор Для этого в базовом классе […]

28. C++ Виртуальные методы класса, ключевые слова virtual и override

Виртуальные методы класса, ключевые слова virtual и override В предыдущей теме мы рассмотрели основные принципы наследования, но что делать если мы в классе-наследнике хотим использовать функцию с таким же именем как в базовом классе? Для этого мы должны «перезаписать функцию» делается это при помощи ключевых слов virtual и override В базовом классе у перезаписываемой функции […]

27. C++ Наследование

Наследование Как говорилось во введении в c++ в классах можно выполнять наследование, т.е. передавать все или часть свойств класса родителя классу наследнику и дополнять их. Общий вид наследования выглядит так: class имя_нового_класса: модификатор_доступа наследуемый_класс {      //тело нового класса } Модификаторы доступа при наследовании мы уже рассматривали в теме «модификаторы доступа» Продемонстрируем на примере: //Создадим […]

26. C++ Перегрузка префиксного и постфиксного инкремента

Перегрузка префиксного и постфиксного инкремента Для начала поговорим чем отличаются префиксный и постфиксный инкремент и декремент (синтаксически они одинаковы): Префиксный ++i; Постфиксный i++; Дело в том, что когда мы напишем код: int i=10; int a=++i; у нас сначала выполнится действие ++i и лишь потом операция присваивания, и результат будет a=11; а когда мы напишем код: […]