Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП Ответы все.docx
Скачиваний:
23
Добавлен:
01.03.2016
Размер:
71.65 Кб
Скачать

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

Класс может иметь несколько непосредственных базовых классов

class A1 {...}; class A2 {...}; class A3 {...}; class B : public A1, public A2, public A3 {...};

Такое наследование называется множественным. При множественном наследовании никакой класс не может больше одного раза использоваться в качестве непосредственного базового. Однако класс мyжет больше одного раза быть непрямым базовым классом.

16. Виртуальные функции.

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

Виртуальные функции - это функции, объявленные в базовом классе и переопределенные в производных классах. Иерархия классов, которая определена открытым наследованием, создает родственный набор пользовательских типов, на все объекты которых может указывать указатель базового класса. Выбор того, какую виртуальную функцию вызвать, будет зависеть от типа объекта, на который фактически (в момент выполнения программы) направлен указатель, а не от типа указателя.

Виртуальными могут быть только нестатические функции-члены.

Виртуальность наследуется. После того как функция определена как виртуальная, ее повторное определение в производном классе (с тем же самым прототипом) создает в этом классе новую виртуальную функцию, причем спецификатор virtual может не использоваться.

17.Средства ограничения доступа к компонентам класса

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

Он описывается следующим образом:

сlass <имя класса>

{ private: <внутренние (недоступные) компоненты класса>;

protected: <защищенные компоненты класса>;

public: <общие (доступные) компоненты класса>;

};

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

Компоненты класса, объявленные в секции private, называются внутренними. Они доступны только компонентным функциям того же класса и функциям, объявленным дружественными (раздел 3.5) описываемому классу.

Компоненты класса, объявленные в секции protected, называются защищенными. Они доступны компонентным функциям не только данного класса, но и его потомков. При отсутствии наследования - интерпретируются как внутренние.

Компоненты класса, объявленные в секции public, называются общими. Они доступны за пределами класса в любом месте программы. Именно в этой секции осуществляется объявление полей и методов интерфейсной части класса.

18 . Наследование классов, полей и методов. Поведение производных классов.

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

Производные классы - это эффективное средство расширения функциональных возможностей существующих классов без перепрограммирования этих классов и повторной компиляции существующих программ. В смысле функционирования производные классы или потомки являются более мощными по отношению к исходным (базовым) классам или родителям, так как, имея доступ ко многим функциям и полям базового класса, они обладают еще и своими компонентами.

По определению компонентами производного класса являются все компоненты базового класса, за исключением конструктора, деструктора и оператора равно (=), а также все компоненты перечисленные в теле производного класса. Первое поле производного класса расположено после всех полей базового класса.

Ограничение доступа к полям и функциям базового класса (родителя) осуществляется с помощью специальных атрибутов, определяющих вид наследования.

Определение производного класса (потомка) выполняется следующим образом:

class <имя производного класса >:<вид наследования><имя базового класса>{<тело класса>};

где вид наследования определяется ключевыми словами: private, protected, public.