нельзя взять ссылку от ссылки, т.е. ее адрес.

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

По умолчанию с++ передает аргументы в функцию по значению. Но можно создавать передаваемый по ссылке параметр. Для этого при объявлении функции перед параметром ставится знак &.

voidf(int&f)

{f=rand();} — не используем *, компилятор сам обработает это как неявную ссылку.

Существует ряд ограничений:

1)    нельзя взять ссылку от ссылки, т.е. ее адрес.

2)    Нельзя сделать массив ссылок.

3)    Нельзя создать указатель на ссылку.

4)    Ссылки на битовые поля не допускаются.

При передаче объекта в функцию по ссылке копия не создается, деструктор не вызывается.

Функция может возвращать ссылку.

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

char &replace(int i); char s[80]=”Hello there”; int main() { replace(5) = “X”; cout<<S; return 0; } char &replace (int i) { return s[i];}

Можно объявлять переменные ссылочного типа и как самостоятельные переменные. Тогда они называются независимыми ссылками. Они обязательно д.б. инициализированы.

 

Вопрос 27. Наследование и спецификаторы доступа

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

В С++ члены класса классифицируются в соответствии с правами доступа на следующие три категории: публичные (public), частные (private) и защищённые (protected). Любая функция программы имеет доступ к публичным членам. Доступ к частному члену имеют только функции-члены класса или функции-друзья класса. Защищённые члены аналогичны частным членам. Разница между ними проявляется только при наследовании классов.

От того, с каким спецификатором доступа объявляется наследование базового класса, зависит статус доступа к членам производного класса. Общая форма наследования классов имеет следующий вид:

class имя_класса: доступ имя_класса {…};

Здесь доступ определяет, каким способом наследуется базовый класс. Спецификатор доступ может принимать три значения – private, public, protected. В случае, если спецификатор доступ опущен, то по умолчанию подразумевается на его месте спецификатор public. Если спецификатор доступ принимает значение public, то все публичные и защищённые члены базового класса становятся соответственно публичными и защищёнными членами производного класса. Если доступ private, то все публичные и защищённые члены базового класса становятся частными членами производного класса. Если спецификатор доступа protected, то все публичные и защищённые члены базового класса становятся защищёнными членами производного класса.

 

Вопрос 28. Конструкторы и деструкторы производных классов

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

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

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


Ссылка на основную публикацию
Adblock detector