Замечание:так как деструктор не имеет списка аргументов, то нет способа выбрать ту или иную функцию при попытке перегрузить деструктор. Поэтому перегрузка деструктора невозможна.
Обычно при разработке нетривиальных программ классы образуют иерархическую структуру, отображающую существующую иерархию объектов. Иерархия классов формируется созданием производных классов на основе базовых, обладающих наиболее общими данными и методами. В свою очередь производный класс может использоваться как базовый для других классов. Здесь класс, на основе которого строится другой класс, называется базовым, а построенный класс – производным.
Шаблон объявления класса можно представить следующим образом: ключ_класса имя_производного_класса: необязательный модификатор доступа имя_базового_класса {тело_производного_класса} объекты производного_класса (через запятую);
Пример:
class Point : public Location {... телокласса Point ...};
Класс Location является базовым и наследуется с атрибутом public. Класс Point - производный класс. Список объектов опущен (после закрывающей фигурной скобки стоит точка с запятой). Двоеточие (:) отделяет производный класс от базового. Атрибут класса (модификатор прав доступа) может задаваться ключевыми словами public и private. Атрибут может опускаться – в этом случае принимается атрибут по умолчанию (для ключевого слова class – private, для struct – public). Смесь (union) не может быть базовым или производным классом.
Атрибут (модификатор прав доступа) используется для изменения прав доступа к наследуемым элементам класса в соответствии с правилами, указанными в табл. 1.
Таблица 1
Ограничения на доступ в базовом классе |
Модификатор наследования прав |
Ограничения на доступ в производном классе |
private |
private |
Нет доступа |
protected |
private |
private |
public |
private |
private |
private |
public |
Нет доступа |
protected |
public |
protected |
public |
public |
public |
Отметим, что в производных классах права на доступ к элементам базовых классов не могут быть расширены, а только более ограничены. Наследование может осуществляться с атрибутом доступа public или private по отношению к базовому классу.
Атрибут private (см. табл. 1), используемый по умолчанию в объявлениях производного класса с ключевым словом "class" или задаваемый явно, трансформирует элементы базового класса с атрибутами доступа public или protected в элементы private производного класса. Доступ же к элементам private базового класса из производного невозможен по определению private атрибутов.
Атрибут public, используемый явно или по умолчанию при объявлении производного класса с ключом structure, не изменяет ограничения на доступ для атрибутов, наследуемых из базового класса, т.е. доступными являются элементы, объявленные в базовом классе как protected или public. Доступ к private невозможен по определению private элементов класса.
Иллюстративный пример наследования прав доступа:
class A {int a1;
public: int a2;
void f1(void) };
class b: A { int b1;
public:
void f1 (void)
{ a1=1;
// ошибка, а1 - private - переменная класса A и доступна только для
//методов и дружественных функций собственного класса.
b1=0; //доступ к переменной типа private из метода класса;
a2=1; // а2 унаследована из класса A с атрибутом доступа
//private и поэтому доступна в методе класса;
} };
void main(void)
{ A a_ob1; // объявление объекта a_ob1 класса A и
b b_ob1; // объекта b_ob1 класса b
b_ob1.a2+=1; //ошибка, т.к. а2 private
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.