- •1. Инкапсуляция
- •2. Полиморфизм
- •3. Наследовние
- •3) Базовые конструкции
- •12)Описание и определение функций
- •13)Назначение прототипа функции
- •14)Операторы
- •15)Массивы-конечная совокупность данных одного типа
- •20)Передача параметров в функции
- •24)Случаи, когда нельзя обойтись без указателей
- •2 5) Динамическое распределение памяти
- •27)Работа с указателями на примере строк
- •30)Сегмент данных для хранения констант
- •31)Функции стандартной библиотеки для работы со строками string.H
- •21) Функция strtok
- •33)Пример использования массивов указателей
- •22) Указатели на функции.
- •Стандартные операции , определенные для предпроцессора
- •Переопределение макросов
- •34)Тэги(tags)
- •37)Динамические структуры данных, основанные на структурах-двунаправленные списки
- •38)Представление списков в программе
- •39)Основные операции над двунаправленными списками
- •40)Инициализация структур
- •41)Объединения
- •38) Открытие потока ввода-вывода,
- •39)Форматированный и неформантированнй ввод и вывод
- •40)Работа с указателем текущей позиции в файле.
- •Главные признаки объектно-ориентированного подхода (Alan Kay).
30)Сегмент данных для хранения констант
Директива #define служит для замены часто использующихся констант,
ключевых слов, операторов или выражений некоторыми идентификаторами.
#define имя_макроса последовательность_символов
31)Функции стандартной библиотеки для работы со строками string.H
char *strcpy(char *dsk, char *src); \\ из src копирует в dsk
int strcmp(char *s1, char *s2); \\ сравнение строк,
char *strcat (char *s1, char *s2); \\ s2 дописывается к s1
сhar * strchr (char *str,char *substr); \\ возвращает указатель на первое вхождение substr в строке str
Функция strchr() возвращает указатель на местонахождение первого совпадения с символом c в строке s ... а если символ не найден, то возвращают NULL.
char *numbers = "01233210"; char *three = strchr(numbers, '3');
int strlen(char *s);-длина строки
char *strtok(char * str, char * delim); \\ разбивает фразу на лексемы
21) Функция strtok
#include <string.h>
char *strtok(char *str1, const char *str2);
Функция strtok() разбивает строку на лексемы. При каждом вызове возвращает адрес первой лексемы
возвращает указатель на следующую лексему в строке, адресуемой параметром str1. Символы, образующие строку, адресуемую параметром str2, представляют собой разделители, которые определяют лексему. При отсутствии лексемы, подлежащей возврату, возвращается нулевой указатель.
Пример
Эта программа разбивает строку "Травка зеленеет, солнышко блестит" на лексемы, разделителями которых служат пробелы и запятые. В результате получится
Травка|зеленеет|солнышко|блестит
#include <stdio.h>
#include <string.h>
int main(void)
{
char *p;
p = strtok("Травка зеленеет, солнышко блестит", " ");
printf(p);
do {
p = strtok('\0', ", ");
if(p) printf("|%s", p);
} while(p);
return 0;
}
33)Пример использования массивов указателей
22) Указатели на функции.
Указатели на функции[1] —Функция располагается в памяти по определенному адресу, который можно присвоить указателю в качестве его значения. Адресом функции является ее точка входа. Именно этот адрес используется при вызове функции. Так как указатель хранит адрес функции, то она может быть вызвана с помощью этого указателя. Он позволяет также передавать ее другим функциям в качестве аргумента.
23) Описания в кот. встреч. [],(),* считаются сложными
25) typedef-позволяет задавать новые имена типов. Пример typedef int INT; INT x=5;
Конструкция typedef позволяет задавать новые имена типов.
Tupedef int INT
Т.е теперь типы одинаковы)
Язык C++ вслед за С позволяет писать функции с переменным числом аргументов. int f(…) Этот заголовок не вызывает у компилятора ошибок. Такая запись означает, что при определении функции компилятору неизвестны ни количество параметров, ни их типы, и он, естественно, не может ничего проверить. Количество параметров и их типы становятся известными только при вызове функции.
Функция sum
23
Препроцессор
Препроцессор С/С++ — программный инструмент, изменяющий код программы для последующей компиляции и сборки. препроцессор обеспечивает использование стандартного набора возможностей:
Замена триграфов ??=, ??(, ??) (и других) символами #, [, ]
Замена комментариев пустыми строками
Включение файла — #include
Макроподстановки — #define
Условная компиляция — #if, #ifdef, #elif, #else, #endif
27) Макросы в языке Си преимущественно используются для определения небольших фрагментов кода. Во время обработки кода препроцессором, каждый макрос заменяется соответствующим ему определением.
Макросы - это препроцессорные "функции" , т.е. лексемы, созданные с помощью директивы #define, которые принимают параметры подобно функциям.
Например,
#define max(a,b) ((a) > (b) ? (a) : (b))
Проблема связанная с макросами
#define SQUARE(x) ((x) * (x))
Считается хорошим стилем окружение в теле макроса скобками любых параметров, а также всего тела макроса, что позволяет избегать проблем, связанных с приоритетностью операторов. В конце концов нам нужно, чтобы запись 7 * SQUARE(2 + 3) разворачивалась в 7 * ((2 + 3) * (2 + З)), а не в 7 * 2 + 3 * 2 + 3.
Сравнение макросов и функций.
Директивы условий компиляции#if, #else, #elif и #endif
Возможно, самыми распространенными директивами условной компиляции являются #if, #else, #elif и #endif. Они дают возможность в зависимости от значения константного выражения включать или исключать те или иные части кода.
Если находящееся за #if константное выражение истинно, то компилируется код, который находится между этим выражением и#endif. В противном случае этот промежуточный код пропускается. Директива #endif обозначает конец блока #if.
Директива #else работает в основном так, как else
Директива #elif означает "else if" и устанавливает для множества вариантов компиляции
