- •1.Истроия создания. Стандарт ansi c.
- •2. Структура программы.Алфавит.Осн конструкции языка
- •3. Типы данных.
- •4. Переменные,идентификаторы, константы.. Модуль Math.H
- •7. Директивы препроцессора.
- •1)Передача копии переменной
- •15, Обл.Видимости.Классы памяти
- •16, Строки.Ф-ции раб.Со строками.
- •17. Указатели и ссылки.
- •18. Динамическое выделение памяти. Свободная память.
- •19, Файлы
- •21. Ооп. Механизмы ооп.
- •23. Конструкторы. Деструкт
- •24. Наследование.
- •25. Множественное наследование. Неоднозначности множ наслед-я.
- •26. Полиморфизм. Перегрузка ф-ции.
- •27.Функции-друзья
- •28. Полиморфизм. Перегрузка операторов.
- •29. Перегрузка нек-х спец-х операторов.
- •32. Шаблоны ф-й
- •33. Шаблоны классов
- •34. Шаблоны. Реализация свойств наследования и полиморфизма.
- •35. Обработка исключений
- •41. Компоненты вкладки standard.
- •42. Компоненты вкладки additional
- •43. Компоненты win32.
- •46. Элементы ActiveX.
- •66. Использование встроенного ассемблера
- •59, Свойства с#.
- •51, Основные понятия яз-ка с#.
- •55, Яп с#. Массивы. Конструкция foreach.
- •52. Яп с#. Ветвление. Циклы. Примеры программ.
- •54. Яп с#. Класс, объекты, поля и методы, конструкторы, деструкторы.
- •2)C параметрами:
- •57. Яп с#. Наследование. Абстрактные классы.
- •48. Нормализация таблиц
- •50. Компоненты доступа к бд
- •56. Яп с#. Символы и строки. Класс Random.
- •58. Яп с#. Вложенные, изолированные классы и класс Object.
- •60. Яп с#. Интерфейсы.
- •61. Делегаты,события.
- •62.Создание приложений с графическим интерфейсом.
- •38. Система меню
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 сообщает С++ о том, что вызовы ф-ции б связаны позже.