
- •Абстрактные классы.
- •Аргументы функций по умолчанию.
- •Арифметические операции с указателями и с указателями на массивы.
- •Ввод-вывод в символьные массивы.
- •Виртуальные классы. Порядок вызова конструкторов и деструкторов.
- •Виртуальные функции.
- •Виртуальные функции-члены.
- •Виртуальный деструктор. Абстрактные классы.
- •Динамическая память. Указатели и массивы. Ссылочный тип.
- •Доступ к глобальным переменным, скрытым локальными переменными с тем же именем (оператор ::).
- •Доступ к членам базовых классов внутри производного класса.
- •Доступ к элементам массива. Вычисление размера массива. Многомерные массивы.
- •Дружественные классы и функции.
- •Закрытые, защищенные и открытые элементы класса.
- •Иерархия классов. Иерархия наследования классов.
- •Инициализация и разрушение (конструкторы и деструкторы).
- •Инициализация массивов по умолчанию. Явная инициализация массивов.
- •Инициализация безразмерных массивов
- •1. Инкапсуляция
- •2. Полиморфизм
- •3. Наследовние
- •22.Использование new и delete на примере динамических массивов, стеков, очередей.
- •Указатель this
- •Указатели на структуру
- •Массивы структур
- •Классы и объекты. Класс как структура.
- •Классы. Спецификаторы доступа public, protected, private.
- •Константные (const) и изменяемые (mutable) члены класса.
- •Конструктор копирования для контейнерного класса.
- •Конструкторы и деструкторы.
- •Конструкторы и способы обращения к ним.
- •Логические операции. Инкремент и декремент. Арифметические операции.
- •Объявление переменной массива
- •Множественное наследование.
- •Модификатор константы. Модификатор volatile. Модификатор const
- •Модификатор volatile
- •Модификатор const
- •Модификатор volatile
- •Объединения: синтаксис и правила.
- •Объединения: создание простого объединения. Использование enum.
- •41. Объекты стандартного предопределенного потокового ввода-вывода cin, cout, cerr, clog.
- •Объявление переменных указателей. Простые операторы с указателями.
- •Оператор if. Оператор if-else. Вложенные операторы if-else. Оператор if-else-if.
- •If (условие_истинно) оператор; else оператор;
- •If (условие_истинно)
- •Операторы динамического распределения памяти (new, delete).
- •Операции динамического распределения памяти.
- •Операции отношения и логические операции. Условная операция. Операции сравнения (Операции отношений)
- •Логические операции.
- •Операция присваивания. Приоритет операций.
- •Определение первичного класса.
- •Определение переменных указателей. Инициализация указателей.
- •Организация списка объектов различного типа. Техническая реализация
- •Параметризованная очередь. Параметризованный стек. Параметризованное бинарное дерево.
- •Int max_len; /* Максимальная длина стека */
- •Int top; /* Индекс элемента в вершине стека */
- •Параметризованный класс двухсвязного списка.
- •58. Перегрузка операций
- •59. Перегрузка для труктур
- •Передача значений параметров по умолчанию. Передача параметров по ссылке и ссылочные переменные.
- •Передача параметра по ссылке
- •Передача структур в функции. Создание массива структур.
- •63. Подставляемые функции (inline-функции).
- •Преобразования указателей на объекты
- •65. Приведите пример использования enum.
- •66. Приведите пример использования inline-функции.
- •67. Приведите пример использования аргументов функций по умолчанию.
- •68. Приведите пример использования арифметических операции с указателями.
- •69. Приведите пример использования виртуальных функций
- •70. Приведите пример использования вызова функций по значению и вызов по ссылке.
- •71. Приведите пример использования дружественных функции.
- •72. Приведите пример использования конструкторов и деструктора.
- •73.Приведите пример использования массива структур.
- •Приведите пример использования перегрузки функций.
- •81. Приведите пример использования указателей и массивов.
- •82. Приведите пример использования условного оператора
- •83.Приведите пример использования циклов for, while, do-while.
- •84. Приведите пример использования шаблонов функций.
- •Принципы организации позднего связывания.
- •Приоритет переменных с файловой и локальной областями действия. Операция уточнения области действия.
- •Производные классы. Доступ к полям и функциям базового класса.
- •88. Простой класс. Вложенные классы
- •Пространство имен. Операторы namespace и using. Пространство имен
- •Прототипы функций. Вызов функций по значению и вызов по ссылке. Область действия. Рекурсия.
- •91.Работа с файлами последовательного и произвольного доступа.
- •92.92.Переменные
- •Где объявляются переменные
- •Локальные переменные
- •Вопрос 95
- •96 Соглашения об именах
- •Тело класса и составные функции.
- •Указатели на массивы. Указатели на строки.
- •Использование указателя на символьную строку
- •Условный оператор. Оператор switch.
- •Формальные и фактические параметры. Массивы в качестве параметров. Аргумент типа void.
- •Способ передачи параметров в подпрограмму
- •110.Циклы for. Циклы while. Циклы do-while. Разница между циклами.
- •Цикл while ("пока") с постусловием
Динамическая память. Указатели и массивы. Ссылочный тип.
Если размер объекта или массива заранее неизвестен (например, изображение), или размер объекта слишком большой, чтобы создавать его внутри функции, значит настало время воспользоваться механизмом динамической памяти С++, использующую отдельную область памяти называемой кучей.
Для этого вам необходимо знать всего два оператора:
new - выделение памяти, если выделение памяти не произошло возвращается нулевой указатель;
delete - освобождение памяти, не во всех компиляторах после освобождения памяти указателю присваивается 0.
#include <iostream>
using namespace std;
int main() {
// создание объекта типа int со значением 45
// и сохранение его адреса в указателе obj
int* obj = new int(45);
// освободили память на которую указывал obj
cout<<"*obj="<<*obj<<endl;
delete obj;
// елементы массива нельзя инициализировать
// им задается значение по умолчанию
// в случае классов вызывается конструктор по умолчанию
int* array = new int[10];
cout<<"array:";
for(unsigned int i=0; i<10; i++)
cout<<array[i]<<" ";
cout<<endl;
delete [] array;
// для избежания возможных ошибок
// указателю лучше присвоить 0 (при доступе
// к нулевому указателю генерируется системная ошибка,
// а значит ошибка не останется незамеченной)
array=0;
...
}
Указатели являются одной из сильных сторон С++. Грамотное их применение позволяет повысить скорость выполнения программы и более эффективно использовать память. Например, во многих случаях в качестве аргументов функции лучше использовать указатели на объект, чем каждый раз создавать их копии.
С указателями используются следующие операции:
& - взятие адреса переменной;
* - разъименование указателя, т.е. получение доступа к объекту;
-> - разъименование члена структуры;
[] - индексация, доступ к элементу массива, при этом считается, что указатель содержит адрес 0 элемента.
Операция индексации может быть реализована с помощью адресной арифметики, где применяются операции ++,--, и +, -.
Можно создавать указатели на любые типы за исключением ссылок и битовых полей. Указатель может указывать не только на данные, но и на область кода, т.е. на функцию.
Массив - множество объектов одного типа расположенных в памяти последовательно. Индексация - операция доступа к элементу массива. Элементы нумеруются от 0.
Внутренне массивы реализованы как указатели на 0 элемент. Различие между ними проявляется в операторе sizeof, который для массива возвращает размер всего массива. Размер массива может указываться только константным выражением.
#include <iostream>
using namespace std; // массивы по 10 элементов типа int
int array1[10]; // не инициализированный массив
int array2[]= {1,2,3,4,5,6,7,8,9,0};//инициализированный массив (заданы значения каждого элемента)
// объявления двухмерных массивов
int array3[5][6];
int array4[2][3]={ {0,1,2}, {2,1,0} };
// строки в С завершаются 0, более подробно см. строки
char* str1="Hello, world"; // указатель на строку "Hello, world"
char str2[]="Hello, world"; // массив символов
char str3[]={'H','e','l','l','o',',',' ','w','o','r','l','d','0' };
int * iptrarray[10]; // массив указателей типа int
int (*iarrayptr)[10]; // указатель на массив из 10 элементов типа int
int main()
{int* iptr;
cout<<"sizeof(iptr)=" <<sizeof(iptr) <<endl;
cout<<"sizeof(array1)="<<sizeof(array1)<<endl;
cout<<"array2[11]="<<array2[11]<<endl;
return 0;}
Ссылки как и указатели хранят адрес объекта, но с автоматическим доступом к самому объекту, т.е. по сути они являются синонимами переменных на которые ссылаются. При определении ссылочной переменной инициализирующее выражение обязательно. Из следующего примера видно, что ссылки чуточку удобнее указателей.
#include <iostream>
using namespace std;
void swap_ref(int &a, int &b) { int c=a; a=b; b=c; }
void swap_ptr(int *a, int *b){ int c=*a; *a=*b; *b=c; }
int main(){int A=10,B=20;
cout << "A="<<A<<" B="<<B<<endl;
swap_ref(A,B);
cout << "after swap_ref(A,B): A="<<A<<" B="<<B<<endl;
swap_ptr(&A,&B);
cout << "after swap_ptr(&A,&B): A="<<A<<" B="<<B<<endl;
return 0;}