Скачиваний:
26
Добавлен:
20.06.2014
Размер:
151.57 Кб
Скачать

Исправления:

  • Добавлена функция system(“pause”) для просмотра результата в консоли.

  • Добавлено определение пространства имён using namespace std, для использования краткого обращения к функциям cout и cin.

  • Исправлено описание заголовка <iostream>.

  • Исправлены различные ошибки распознавания текста.

  • Для отображения корректного русских символов в консоли была добавлена функция setlocale( LC_ALL, "Russian" ).

Листинг №4:

#include <iostream>

using namespace std;

struct Base {

enum ClassType {BASE, SUBCLASS};

virtual ClassType isA() {return BASE;}

};

struct SubClass : public Base {

virtual ClassType isA() {return SUBCLASS;}

};

void print(Base& obj) {

if (obj.isA()==Base::BASE)

cout << "Это объект базового класса\n";

else

if(obj.isA()==Base::SUBCLASS)

cout<< "Это объект подкласса\n";

else

cout<< "Это неизвестный тип объекта\n";

}

void fn(Base& obj) {

print(obj);

}

void main() {

setlocale(LC_ALL,"Russian");

Base aBaseClass;

SubClass aSubClass; fn(aBaseClass); fn(aSubClass);

system("pause");

}

Контрольные вопросы

  1. Что такое производный класс, в чем выражается механизм наследования?

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

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

  1. Какие синтаксические конструкции в языке С++ используются для описания производных классов?

Производный класс строится на базе уже существующего с помощью конструкции следующего вида:

class Base {

// Элементы класса

};

class Derived: [модификатор доступа] Base {

// Элементы класса

};

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

  1. Каковы особенности доступа к компонентам производных классов?

  1. В какой последовательности вызываются конструкторы для производных классов?

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

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

  1. Что такое объемлющий класс?

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

  1. Как реализуется механизм полиморфизма для производных классов?

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

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

  1. Где и когда используется правило isA() ?

isA(). Это виртуальное правило возвращает константу, которая является уникальной для каждого типа подкласса..

Соседние файлы в папке Отчеты