- •1)Указатели.
- •3) Инициализация указателей
- •5) Операции с указателями
- •33) Связные структуры данных: стек- описание и операции со стеком.
- •35) Связные структуры данных: очередь- описание и операции.
- •37) Связные структуры данных: список- описание и операции.
- •7) Массивы. Описание одномерных и многомерных массивов, инициализация.
- •9) Ввод и вывод массивов, два способа: с выбором элемента по индексу и с выбором элемента по указателю.
- •27) Передача массивов в качестве параметров.
- •19) . Способы обмена данными: с помощью глобальных переменных.
- •21) Способы обмена данными: Возвращаемое значение.
- •23) Способы обмена данными: Параметры функции.
- •25) Передача параметров по значению и по адресу.
- •29) Параметры со значениями по умолчанию.
- •13) Типы данных, определяемые пользователем: структуры.
- •15)Типы данных, определяемые пользователем: объединения.
- •11) Типы данных, определяемые пользователем: перечисления.
- •4) Понятие класса. Описание класса (Паскаль). Поля и методы. Пример
- •При описании нового объекта с инициализацией другим объектом;
- •При передаче объекта в функцию по значению;
- •При возврате объекта из функции.
- •16) Конструктор и деструктор, их свойства (Паскаль).
- •8) Описание объектов (экземпляров класса) Способы обращения к полям объекта. (Паскаль).
- •17) Функции. Объявление и определение, заголовочные файлы в с и предописания (forward) в Паскале.
- •31) Перегрузка функций.
- •39) Понятие ооп Основные свойства ооп (инкапсуляция, наследование, полиморфизм).
- •24) Виртуальные методы и абстрактные классы.
4) Понятие класса. Описание класса (Паскаль). Поля и методы. Пример
Пример объявления простого класса:
type
TPerson = class (TObject) // TPerson – имя класса,
private
fname: string[15]; faddress: string[35]; // fname и faddress – имена полей,
public
procedure Show; // show – имя метода.
end; // Согласно принятому в Delphi соглашению, имена полей должны начинаться с буквы f (от слова field – поле).
Классы могут быть объявлены в секции интерфейса (interface) или в секции реализации (implementation) модуля. Определение классов внутри подпрограмм и других блоков не допускается.
14) Конструктор и деструктор, их свойства (С++).
В каждом классе должен быть хотя бы один метод, который предназначен для инициализации объекта - конструктор.
Его имя совпадает с именем класса, и он вызывается автоматически при инициализации объекта. Автоматический вызов конструктора позволяет избежать ошибок, связанных с использованием неинициализированных переменных.
Существует три типа конструкторов:
конструктор с параметрами, используется для инициализации объекта требуемыми значениями;
конструктор без параметров, используется для создания «пустого» объекта;
конструктор копирования, используется для создания объекта, аналогичного тому, который уже существует.
Конструктор без параметров и конструктор копирования создаются по умолчанию.
Основные свойства конструкторов:
Конструктор не возвращает значение, даже типа void.
Нельзя получить указатель на конструктор.
Класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации (при этом используется механизм перегрузки).
Конструктор, вызываемый без параметров, называется конструктором по умолчанию.
Параметры конструктора могут иметь любой тип, кроме этого же класса.
Если программист не указал ни одного конструктора, компилятор создает его автоматически. Такой конструктор вызывает конструкторы по умолчанию для полей класса. В случае, когда класс содержит константы или ссылки, при попытке создания объекта класса будет выдана ошибка, поскольку их необходимо инициализировать конкретными значениями, а конструктор по умолчанию этого делать не умеет.
Конструктор копирования — это специальный вид конструктора, получающий в качестве единственного параметра указатель на объект этого же класса
Этот конструктор вызывается в тех случаях, когда новый объект создается путем копирования существующего:
При описании нового объекта с инициализацией другим объектом;
При передаче объекта в функцию по значению;
При возврате объекта из функции.
Если программист не указал ни одного конструктора копирования, компилятор создает его автоматически. Такой конструктор выполняет поэлементное копирование полей.
3 случая вызова конструктора копирования
при описании нового объекта с инициализацией другим объектом;
при передаче объекта в функцию по значению;
void print_person(person a ) //объект передается по значению
{a.print();}
при возврате объекта из функции;
person set_inf()//объект передается по значению
{person s;//создается временный объект
s.set_person("Sidorov",25); //объект возвращается как значение функции
return s;}
class bibl
{ char* name, avtor;
float stoim;
public:
bibl();//конструктор без параметра
bibl (char*, float);//конструктор с параметром
bibl(const bibl&);//конструктор копирования
Вызывается конструктор так:
bibl k1("Айвенго", 400); // вызов конструктора с параметрами
cout << k1.Getname() <<k1.Getavtor() <<k1.Getstoim()<<endl;; // вывод значений на монитор
bibl k2; // вызов конструктора без параметров
k2.Setname("Клеймо"); // заполнение поля name
k2.Setavtor("Петров"); // заполнение поля kol
k2.Setstoim(250); // заполнение поля stoim
cout << k2.Getname()<<k2.Getavtor() <<k2.Getstoim()<<endl;// вывод значений на монитор
bibl k3 = k2; // вызов конструктора копирования
Деструктор – это особый вид метода, применяющийся для освобождения ресурсов, выделенных конструктором объекту. Деструктор вызывается автоматически, когда объект удаляется из памяти:
для локальных объектов это происходит при выходе из блока, в котором они объявлены;
для глобальных — при выходе из main;
для динамических объектов деструктор вызывается неявно при использовании операции delete.
Имя деструктора начинается с тильды (~), непосредственно за которой следует имя класса:
~person()
Свойства деструктора:
не имеет аргументов и возвращаемого значения;
не наследуется;
не может быть объявлен как const или static;
может быть виртуальным.
Если деструктор явным образом не определен, компилятор автоматически создает пустой деструктор.
Описывать в классе деструктор явным образом требуется в случае, когда объект содержит указатели на память, выделяемую динамически — иначе при уничтожении объекта память, на которую ссылались его поля -указатели, не будет помечена как свободная.
Указатель на деструктор определить нельзя.
Деструктор для рассматриваемого примера будет выглядеть так:
person::~person() {delete [] name;}
Явно вызывать деструктор объекта не рекомендуется.