- •1)Краткий обзор основных парадигм программирования
- •13) Класс как область видимости
- •19) Конструктор преобразования и конструкторы с двумя и более параметрами
- •25) Порядок вызова конструкторов и деструкторов
- •31) Перегрузка функций
- •37) Закрытое (private) наследование
- •43) Абстрактные классы. Чистые виртуальные функции
- •49) Интерфейсы
- •55) Шаблонные классы
13) Класс как область видимости
Класс является областью видимости описанных в нем членов класса. Идентификатор члена класса локален по отношению к данному классу. Классы могут быть вложенными. Одноименные идентификаторы членов класса закрывают видимость соответствующих внешних идентификаторов. Операция '::' позволяет получить доступ к одноименным объектам, внешним по отношению к текущей области видимости, в частности, к глобальным функциям и переменным, следующим образом:
имя_класса :: имя_члена_класса или
:: имя - для имен глобальных функций и переменных.
Пример:
int ia1;
void f1(int b1) {
ia1 = ia1 + b1; }
class x {
int ia1;
public:
x(){ia1 = 0;}
void f1(int b1){
::f1(b1); // вызов глобальной функции
}
};
int main(){
x a2;
a2.f1(2);
return 0; }
19) Конструктор преобразования и конструкторы с двумя и более параметрами
Если для создания объекта необходимы параметры, то они указываются в круглых скобках после идентификатора переменной:
box b2(1,2,3);
box b3(5);
Указываемые параметры являются параметрами конструктора класса. Если у конструктора имеется ровно один входной параметр, который не представляет собой ссылку на свой собственный класс, то соответствующий конструктор называется конструктором преобразования. Этот конструктор называется так в связи с тем, что в результате его работы на основе объекта одного типа создается объект другого типа (типа описываемого класса).
Если уже описан класс T и описывается новый класс X, то его конструкторы преобразования могут иметь любой из следующих прототипов:
X(T);
X(T&);
X(const T&);
Как уже было отмечено, если у параметра конструктора преобразования имеется априорное значение, и при описании объекта явно не задается фактический параметр, этот конструктор играет роль конструктора умолчания. Пример:
class X {
int x1;
public:
X(int px1 = 0}
};
Для такого класса будут верны следующие объявления объектов:
int main(){
… Х x1, x2(1); … }
25) Порядок вызова конструкторов и деструкторов
Итак, конструкторы можно классифицировать по набору входных парамет- ров следующим образом: 1) x() – конструктор умолчания
2) x(x&), x(const x&) – конструктор копирования
3) x(t), x(t&), x(const t&) – конструктор преобразования
4) конструктор с двумя и более параметрами
При создании объекта конструкторы вызываются в следующем порядке:
1) Конструкторы базовых классов, если класс для создаваемого объекта является наследником других классов в порядке их появления в описании класса. Если в списке инициализации описываемого класса присутствует вызов конструктора преобразования (или конструктора с двумя и более параметрами) базового класса, то вызывается конструктор преобразования (или конструктор с двумя и более параметрами), иначе вызывается конструктор умолчания базового класса.
2) Конструкторы умолчания всех вложенных информационных членов, которые не перечислены в списке инициализации, и конструкторы преобразования, копирования и конструкторы с двумя и более параметрами всех вложенных информационных членов, которые перечислены в списке инициализации. Все перечисленные в данном пункте конструкторы (умолчания, преобразования, копирования, с двумя и более параметрами) вызываются в порядке описания соответствующих информационных членов в классе.
3) Собственный конструктор. Такая последовательность вызова конструкторов логически обосновывается тем, что в момент выполнения собственного конструктора все информационные поля должны быть уже проинициализированы.
Деструкторы вызываются в обратном порядке:
1) Собственный деструктор. В момент начала его работы поля класса еще не очищены, и их значения могут быть использованы в теле деструктора.
2) Деструкторы вложенных объектов в порядке, обратном порядку их описания.
3) Деструкторы базовых классов в обратном порядке их задания.
