- •5)Указатели и ссылки.
- •12) Параметры структурных типов.
- •13) Классы памяти переменных.
- •14) Параметры-функции.
- •15) Правила, определяющие видимость переменных в функциях.
- •16) Пространства имен.
- •Int Pages;
- •Int getPages(); // тело будет описано в book.Сpp
- •18) Перегрузка функций.
- •19) Функции с параметрами по умолчанию.
- •20) Текстовые файлы. Отличие от Delphi Pascal.
- •Int fscanf(file *stream,const char *format[,adress,...]);
- •Int fprintf(file *stream,const char *format[,argument,...]);
- •21) Двоичные файлы. Отличие от Delphi Pascal.
- •22) Определение класса, компоненты класса. Ограничение доступа.
- •23) Инициализация полей при отсутствии конструктора.
- •24) Конструкторы. Инициализация полей при наличии конструктора.
- •25) Деструкторы.
- •27) Простое и множественное наследование классов.
- •28) Наследование. Ограничение доступа при наследовании.
- •29) Конструкторы и деструкторы производных классов.
- •30) Композиция.
- •31)Наполнение
- •32) Полиморфное наследование. Простой полиморфизм.
- •33) Полиморфное наследование. Сложный полиморфизм.
- •34) Статические компоненты классов.
- •35) Особенности работы с динамическими объектами.
- •36) Объекты с динамическими полями. Копирующий конструктор.
- •Void Print(tPoint r) {…}
- •37) Дружественные функции, методы и классы.
- •38) Переопределение операций.
- •39) Шаблоны классов.
- •40) Шаблоны функций.
- •46) Сигналы, слоты и события Qt.
12) Параметры структурных типов.
Имя структуры не является указателем на нее.
Пример 1. Сумма элементов массива (указатель).
struct mas{int n; int a[10]; int s;} massiv;
int summa(struct mas *x)
{ int i,s=0; for(i=0;i<x->n;i++) s+=x->a[i]; x->s=s; return s;}
Вызов: summa(&massiv);
Пример 2. Сумма элементов массива (ссылка).
struct mas{int n; int a[10]; int sum;} massiv;
int summa(struct mas &x)
{ int i,s=0;for(i=0;i<x.n;i++) s+=x.a[i]; x.s=s; return s;} Вызов: summa(massiv);
Параметры сложных структурных типов
Передача массивов в подпрограммы.при передаче одномерного массива в качестве параметра достаточно указать, что этот параметр – массив или вообще описать указатель на элемент, а при работе с многомерными массивами можно не указывать размерность по первому индексу.
Тогда, допустимы следующие варианты описания параметров-массивов:
а) int x[5] Û int x[] Û int *x // размерность проверяться не будет
б) int y[4][8] Û int y[][8] // будет проверяться размерность массива // только по второму размеру
При этом если в функцию передается массив, значения которого не должны меняться внутри функции, его следует описать как const, например:
int k23(const int *a);
Параметры – строки. При разработке функций, работающих со строками, обычно используют прием, который применяется в стандартных функциях обработки строк: обес-
печение возможности вызова функций как процедур и как функций. Это достигается тем,что адрес результирующей строки дублируется и возвращается еще и как результат функции. Примеры.Написать подпрограмму удаления ≪лишних≫ пробелов: strdel(st,st2); // вызов подпрограммы как процедры; puts(strdel(st,ptr2)); // вызов подпрограммы как функции
3. Параметры-структуры. В отличие от массивов и строк переменная типа ≪струкура≫ не является указателем, поэтому если структура передается в качестве параметра, то
для нее действуют те же правила, как и для скалярных значений. для передачи в подпрограмму параметров типа ≪структура≫, значения которых необходимо вернуть в вызывающую программу, необходимо использовать ссылки или указатели. В случае, когда изменение полей структуры не требуется, рекомендуется для исключения лишнего копирования всей структуры передавать её по ссылке со спецификатором const. Реализовать передачу изменяемой структуры в подпрограмму можно с использованием указателя или ссылки. Результат будет одинаков, а вот синтаксис описания и вызова
подпрограммы будут отличаться.
13) Классы памяти переменных.
1. Автоматические переменные (auto)(Две разные переменные)
main(){auto int a;…}abc() {auto int a;…}
2. Внешние переменные (extern)(Одна и та же переменная)
E xtern int a;
main()
{extern int a;…}
abc()
{extern int a;…}
bcd()
{int a;…}
3. Статические переменные (static)( В отличие от автоматической статическая переменная увеличивается с каждым вызовом)
abc()
{ int a=1; static int b=1;
… a++; b++; …}
4. Внешние статические переменные (extern static)(Внешняя переменная доступна во всех файлах программы, а внешняя статическая только в том файле, где описана)
int a;
extern static int b;
Файл
5. Регистровые переменные (register) (как и автоматическая, только по возможности размещается в регистре)
register int a;
