Множественное наследование

.Множественное наследование. Передача параметров в конструктор базового класса

Когда базовый класс имеет конструктор с аргументами, производные классы должны передавать базовому классу необходимые аргументы. Для этого используется расширенная форма конструкторов производных классов.

порождённый_конструктор(список_аргументов): базовый1(список_аргументов), базовый2(список_аргументов), …, базовыйN(список_аргументов) {…}

Здесь под базовый1, базовый2, …, базовыйN обозначены имена базовых классов, наследуемые производным классом. Обратим вниманием, что с помощью двоеточия конструктор производного класса отделяется от списка конструкторов базового класса. Список аргументов, ассоциированный с базовыми классами, может состоять из констант, глобальных переменных или параметров конструктора производного класса.

class X { protected: int i,j; public: X(int a, int b) { i=a; j=b;} }; class Y:public X{ int k; public: Y(int a, int b, int c):X(a,b){k=c;}

 

Вопрос 30. Указатели и ссылки на производные классы

В общем случае указатель одного типа не может указывать на объект другого типа. Из этого правила есть исключение, которое относится только к производным классов. В С++ указатель на базовый класс может указывать на объект производного класса. Ссылки на базовый класс могут быть использованы для ссылок на объект производного типа.

 

Вопрос 31.Виртуальные функции

Виртуальная функция – это функция, объявленная с ключевым словом virtual в базовом классе и переопределенная в производных классах. Виртуальные функции являются особыми функциями, потому что при вызове объекта производного класса с помощью указателя или ссылки на него С++ определяет во время исполнения программы, какую функцию вызвать, основываясь на типе объекта. Для разных объектов вызываются разные версии одной и той же виртуальной функции. Класс, содержащий одну или более виртуальных функций, называется полиморфным классом.

Базовыйкласс:

virtual void who();

производный класс:

voidwho();//происходит переопределение функции для данного класса.

Виртуальные функции наряду с производными типами позволяют с++ поддерживать полиморфизм времени исполнения. Это позволяет переопределять функции базового класса в классах-потомках. Т.е. базовый класс определяет общий интерфейс и позволяет производным классам иметь свои реализации метода. Полиморфизм определяется фразой «один интерфейс – множество методов». Базовый и производные классы образуют иерархию, переход от базового к производному отвечает переходу от большей к меньшей общности.

 

Вопрос 32. Чисто виртуальные функции и абстрактные типы

Если виртуальная функция не переопределена в производном классе, при вызове вызовется версия из базового класса. Однако во многих случаях невозможно содержательно определить виртуальную функцию в базовом классе. Чтобы все производные классы определили все необходимые функции, используются чисто виртуальные функции – это функции, которые объявлены в базовом классе, но не имеют в нем определения.

virtual тип имя_функции(список_параметров)=0;

Если класс имеет чисто виртуальную функцию, то он называется абстрактным, у него нет объектов, служит только только базовым для других классов, но можно объявить указатель или ссылки на него.

 

Вопрос 33. Ранее и позднее связывание

Раннее связывание означает, что объект и вызов функции связаны между собой на этапе компиляции, т.е. вся необходимая информация для определения функции для вызова известна во время компиляции. Это характерно для стандартных функций, перегруженных функций и операторов.

Позднее связывание означает, что объект связывается с вызовом функции только во время исполнения программы. В с++ достигается с помощью виртуальных функций и производных классов.


Ссылка на основную публикацию
Adblock detector