Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КП все ответы.doc
Скачиваний:
4
Добавлен:
28.10.2018
Размер:
312.83 Кб
Скачать

27.Функции-друзья

Может так случится, что потребуется предоставить некоторым внешним функциям возможность доступа к защищенным членам класса. Для такого доступа можно воспользоваться ключевым словом friend. Без некоторого механизма дружественности программист вынужден был объявлять такие объекты открытыми, а значит обращаться к ним могла любая внешняя функция. Объявление друзей должно находиться в классе, кот содержит защищенные члены.

Пример.Class Student{ Friend void initialize (Student*)

Public: ………. Private: Int semesterHours; Float gpa;}; Void initialize (Student *ps){ pS->gpa=0; pS->semesterHours=0;}

Initialize имеет доступ ко всем защищенным членам класса Student. Одна и та же ф-я мож быть объявлена другом нескольких кл.

Class Student;Class Teacher;{Friend void registration ();Private:Int noStudents;Student *pList [100];Public:

Void assignGrades ();};Class Student{Friend void registeration ();Public:…….Private:Teacher *pT;Int semesterHours;Float gpa;};

Предварительное описание класса используется тогда, когда два класса должны обращаться один к одному. Существующий кл м б объявлен как друг некот-го кл целиком. Это означает, что все функции-члены класса становятся друзьями другого класса.

28. Полиморфизм. Перегрузка операторов.

Виды полиморфизма:

1 прегрузка ф-ций

2 перегрузка операторов

3 виртуальные ф-ции.

С++ позволяет называть неск разных ф-ций одним и тем же именем. Различают полное имя ф-ции. В него входят:

- собственное имя ф-ции;

- аргументы ф-ций;

- имя класса, к кот принадлежит ф-ция;

- тип аргументов ф-ции (тип аргумента не входит в полное имя ф-ции).

Помимо перегрузки ф-ций в С++ сущ возможность перегрузки операторов, т. е присутсвует возможность придать новый смысл таким операторам, как +, -, *, ++. Кроме того есть возможность ввести собственные операторы.

С++ дает каждому оператору спец функциональное имя, кот состоит из ключ слова operator, след за нем символа оператора и расположенных после него типов аргументов. Int operator +(int int).

Несмотря на то, что большинство операторов перегружается стандартным образом. Сущ нек операторы, перегрузка кот осущ не так как обычно, например, таких операторов: операторы инкремента и декремента, оператор присваивания, операторы передачив поток и из потока.

29. Перегрузка нек-х спец-х операторов.

Специальные символы(+, -, & и т.д.) будем называть простыми операторами.

Перегрузка оп-ов позволяет принимать для собственных кл-в те же оп-ры, кот используются для встроенных типов С++.

Сравните 2 фрагмента кода для некот кл usDollar:

1. //expense – подсчитать кол-во уплаченных денег (учитывать процент и требуемую сумму).usDollar expense( usDollar principle, double rate) {/подсчитываем %

Usdollar interest = principle interest // добавим это к требуемой сумме и вернём результат;

Return principle/ add(interest)

2. UsDollar expense(usDollar principle, double rate);{Usdollar interest = principle *rate;

Return principle + interest;

С++ даёт каждому оператору специальное функциональное имя, кот состоит из ключевого слова operator, следующего за ним символа оператора и расположенном после него соответствующих типов аргументов.

Int operator + (int, int)

30-31. Виртуальные ф-ции. Абстрактный тип данных, чисто виртуальные ф-ции.

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

Выбор перегруженной ф-ции на этапе компиляции наз ранним связыванием.

Виртуальная ф-ция – ф-ция, вызовы кот связываются на этапе выполнения программы, т. е. с п-ю позднего связывания.

Особенности виртуальных ф-ций:

1 Статические ф-ции-члены не м б объявлены виртуально (т к ф-ции-члены не выз-ся объектами).

2 При указании имени класса в вызове ф-ции б компилироваться с использованием раннего связывания не зависимо от того, объявлена она виртуально или нет.

3 Вирт ф-ция не м б встроенной inline (вне зависимости от способа описания ф-ции-член рассматривается как внешняя)

4 Конструкторы не м б виртуальными, т к во время выполнения конструктора не сущ объекта какого-либо типа

5 Деструктор м б виртуальным.

Виртуальные ф-ции похожи, но не имеют ничего общего с виртуальным наследованием. Ключевое слово Virtual сообщает С++ о том, что вызовы ф-ции б связаны позже.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]