- •1.4 Основы концепции .Net
- •1.5 Программные системы ms vs.Net, комментарии.
- •1.7 Современные системы разработки с программ
- •1.10 Зона видимости функций, взаимосвязь с ресурсами.
- •1.11 Образное представление функций и их вызовов в программной памяти.
- •1.12 Что такое переменная, три уровня интерпретации.
- •1.15 Квалификаторы классов памяти в с, комментарии.
- •1.17 Размещение массивов в памяти, варианты обращения к элементам.
- •1.19 Что из себя представляет программа в памяти эвм, дизайн образа.
- •2.1 Заголовочные файлы, назначение, примеры
- •2.3 Что такое библиотеки stl (один из авторов) и atl, назначение.
- •2.4 Функции в с, назначение, программный дизайн, примеры.
- •2.5 Inline – функции в с, особенности их использования
- •2.6 Вызовы функций по значению и по ссылке, смысловое содержание.
- •2.7 Организация вызовов функций по ссылке, варианты, примеры.
- •2.8 Вызов функции через использование параметра – ссылки – псевдонима переменной.
- •2.12 Что такое сигнатуры – уникальные кодовые идентификаторы, пример.
- •2.16 Передача массивов функциям, варианты, примеры.
- •3.1 Переменная в программировании, назначение, отличительные особенности.
- •3.12 Концептуальное назначение массивов в программировании, примеры.
- •3.13 Примеры действий над массивами в с.
- •3.15 Символьные массивы и строки в с, примеры.
- •3.17 Отличительные особенности локальных массивов классов памяти auto и static.
2.6 Вызовы функций по значению и по ссылке, смысловое содержание.
1) По значению – по умолчанию (информация защищена)
2) По ссылке – исп вызов по адресу ячейки, может изменяться значение переменной – меньше ресурсов, быстрее, но меньшая надежность.
1. fun_by_val(int a)
2. fun_by_ref(int &b)
b в данном случае локальная переменная, параметр-ссылка принимает адрес и работает со значением по нему.
2.7 Организация вызовов функций по ссылке, варианты, примеры.
#include <iostream>
using std::cout; using std::endl;
void squareByRef(int &);
void main()
{
int y=4;
cout << “y= ” << y << “befor call squareByRef” << endl;
squareByRef(y);
cout << “y= ” << y << “after call squareByRef” << endl;
}
void squareByRef(int &b) {b*=b;}
2.8 Вызов функции через использование параметра – ссылки – псевдонима переменной.
#include <iostream>
using std::cout; using std::endl;
void main()
{
int x=3, &y=x;
cout << “x= ” << x << endl << “y= ” << y << endl; (x=3, y=3)
y=7;
cout << “x= ” << x << endl << “y= ” << y << endl; (x=3, y=7)
}
2.9 Прототипы функций в C/C++, назначение, особенности использования.
Введены в С++, в исходном С их не было. В дальнейшем приняты для С стандартом ANSI/ISO. Их использование является теперь обязательным для С/С++, хотя возможны исключения.
Прототип – заявка на использование функции. В прототипе определяется имя используемой функции, тип значения которое она возвращает, типы аргументов, которые она должна принимать при вызове.
Прототип используется для проверки компилятором правильности вызова функции, контроль. В С этого не было => много ошибок.
- Компилятор игнорирует имена аргументов
- Прототип необходимо вставлять до вызова функции, либо до определения (лучше)
Стандарт ANSI/ISO использует прототипы, но их можно и не прописывать. В С/С++ существует автоматическая подсистема формирования прототипов функций, которых мы не создали. Такие прототипы формируются компилятором на основании первой «вставки» функции в программу. При этом тип возвращаемого значения int, а типы параметров игнорируются вообще.
Прототип необходимо определить вне каких либо функций, например до мэйн, или для подфункции (локальной), для экономии ресурсов.
2.11 Перегружаемые функции в С++, назначение, пример.
Пример использования – выполнение одинаковых действий над данными различных типов или над данными различных комбинаций. В этом случае для удобочитаемости программы (использования единообразия интерфейса) имеет смысл давать таким функциям одинаковые имена. Имя одно, а логика обработки данных разная. В литературе для функций, которые перегружаются (т е при их вызове данные обрабатываются по разной логике) называются перегружаемыми функциями (перегружаемые, по разному вызываемые и обрабатываемые функции).
int square(int x) {return x*x;}
double square(double y) {return y*y;}
2.12 Что такое сигнатуры – уникальные кодовые идентификаторы, пример.
Идентификаторы – имя, тип данных, значение (в С входят еще несколько: класс памяти, период хранения, область действия, тип компоновки)
2.13 Шаблоны функций в C/С++, назначение, примеры.
Нововведение С++. Идея этой программной конструкции родственна конструкции перегружаемой функции. Организация однонаправленных действий, несколько раз по-разному используя одно имя.
Но! Отличие шаблонов от перегруженных функций
то, что программистами формируется один блок программного текста (а не машинного кода) – шаблон функции. Система С++ автоматически преобразует этот блок в несколько блоков программного кода, которые задаются вызовами шаблонной функции.
в отличие от перегружаемых функций, шаблоны имеют одну программную логику => список параметров таких функций должен быть одним и тем же, различаться должны при вызове типом данных. Площади квадрата и круга не пройдут изза количества параметров.
Объявление шаблонной функции должно начинаться с ключевого слова template. Синтаксис: наличие открывающих и закрывающих скобок, в теле функции список параметров. Каждый параметр должен начинаться с ключевого слова class или typedef (данные пользователя)
template <class x, class y, typedef z>
2.14 Пространство имён в C/С++, назначение, примеры.
Пространство имён (англ. namespace) — некоторое множество, под которым подразумевается модель, абстрактное хранилище или окружение, созданное для логической группировки уникальных идентификаторов (то есть имён). Идентификатор, определенный в пространстве имён, ассоциируется с этим пространством. Один и тот же идентификатор может быть независимо определён в нескольких пространствах. Таким образом, значение, связанное с идентификатором, определённым в одном пространстве имён, может иметь (или не иметь) такое же (а скорее, другое) значение, как и такой же идентификатор, определённый в другом пространстве.
using namespace std;