Хелпикс

Главная

Контакты

Случайная статья





Доступ к элементам класса. Таблица 1.1. Конструкторы и деструкторы при наследовании. Пример 1.1.. Виртуальные функции



Доступ к элементам класса

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

Таблица 1.1

Наследование Доступ в базовом классе Доступ в производном классе
public public protected private public protected private

 

Наследование Доступ в базовом классе Доступ в производном классе
protected public protected private protected protected private
private public protected private private private private

Конструкторы и деструкторы при наследовании

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

Пример 1.1.

#include <string.h>

class Base

{ public:

Base(int, float);

};

class Derived: Base

{ public:

Derived(char* lst, float amt);

};

Derived:: Derived(char* lst, float amt) : Base(strlen(lst),amt)

{ }

В деструкторе производного класса компилятор автоматически генерирует вызовы базовых деструкторов, поэтому для удаления объекта производного класса следует сделать деструктор в базовых классах виртуальным. Для вызова используется delete this либо operator delete.

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

Функция-элемент может быть объявлена как virtual. Ключевое слово virtual предписывает компилятору генерировать некоторую дополнительную информацию о функции. Если функция переопределяется в производном классе и вызывается с указателем (или ссылкой) базового класса, ссылающимся на представитель производного класса, эта информация позволяет определить, какой из вариантов функции должен быть выбран: такой вызов будет адресован функции производного класса.

Для виртуальных функций существуют следующие правила:

- виртуальную функцию нельзя объявлять как static.

- спецификатор virtual необязателен при переопределении функции в производном классе.

- виртуальная функция должна быть определена в базовом классе и может быть переопределена в производном.



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.