Понедельник, Июль 5th, 2010

Шпоры по С++

Как всякий класс, абстрактный класс может иметь явно определенный конструктор. Из конструктора возможен вызов методов класса, но любые прямые или опосредованные обращения к чистым виртуальным функциям приведут к ошибкам во времени выполнения программы.
Механизм абстрактных классов разработан для представления общих понятий, которые невозможно использовать непосредственно, но на их основе можно, как на базе, построить частные производные классы. Например, из абстрактного класса «фигура» можно сформировать класс «треугольник», «окружность» и т.д.
Термины полиморфизм и позднее (динамическое) связывание обычно применяются, когда говорят о механизмах наследования и виртуальных функциях языка С++.
Полиморфизмом называют свойство базового класса, позволяющее ему обеспечивать взаимодействие с виртуальными функциями, которые могут по-разному определяться несколькими производными классами.
Термин позднее связывание относится к тому обстоятельству, что компилятор не может определить заранее, какая функция должна вызываться на самом деле, если обращение к виртуальной функции использует указатель или ссылку на базовый класс. Хотя переменная и определяется как указатель на базовый класс, она в действительности может указывать на объект производного класса. Эта особенность виртуального механизма приводит к тому, что адрес функции может быть найден только во время исполнения программы.

32 Множественное наследование.
Класс называют непосредственным (прямым) базовым класом (прямой базой), если он входит в список базовых классов при определении класса. В то же время для производного класса могут существовать косвенные или непрямые предшественники, которые служат базовыми для классов, входящих в список базовых. Если некоторый класс А является базовым для В и В есть база для С, то класс В является непосредственным базовым классом для С, а класс А – непрямой базовый класс для С. Обращение к компоненту ха, входящему в А и унаследованному последовательно классами В и С, можно обозначить в классе С либо как А::ха, либо как В::ха.
Иерархию производных классов удобно представлять с помощью направленного ациклического графа, где стрелкой изображают отношение «производный от». Производные классы принято изображать ниже базовых.
Класс может быть порожден из любого числа базовых классов.
class X1 {…};
class X2 {…};
class X3 {…};
class Y1:public X1, public X2, public X3 {…};
Наличие нескольких прямых базовых классов называют множественным наследованием. Определения базовых классов должны предшествовать их использованию в качестве базовых. При множественном наследовании никакой класс не может быть больше одного раза использоваться в качестве непосредственного базового. Однако класс может быть непрямым базовым классом больше одного раза:
class X {…; f(); …};
class Y:public X {…};
class Z:public X {…};
class D:public Y, public Z{…};

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Категория: Шпоры