- •1)Указатели.
- •3) Инициализация указателей
- •4) Понятие класса. Описание класса (Паскаль). Поля и методы. Пример
- •5) Операции с указателями
- •7) Массивы. Описание одномерных и многомерных массивов, инициализация.
- •8) Описание объектов (экземпляров класса) Способы обращения к полям объекта. (Паскаль).
- •9) Ввод и вывод массивов, два способа: с выбором элемента по индексу и с выбором элемента по указателю.
- •11) Типы данных, определяемые пользователем: перечисления.
- •12) Константный указатель на вызвавший метод объект (self ) (Паскаль).
- •13) Типы данных, определяемые пользователем: структуры.
- •15)Типы данных, определяемые пользователем: объединения.
- •16) Конструктор и деструктор, их свойства (Паскаль).
- •17) Функции. Объявление и определение, заголовочные файлы в с и предописания (forward) в Паскале.
- •19) . Способы обмена данными: с помощью глобальных переменных.
- •21) Способы обмена данными: Возвращаемое значение.
- •23) Способы обмена данными: Параметры функции.
- •24) Виртуальные методы и абстрактные классы.
- •25) Передача параметров по значению и по адресу.
- •30) Delphi nenado
- •31) Перегрузка функций.
- •40) Код проекта. Nenado
1)Указатели.
Указатель - это переменная, содержащая адрес некоторого объекта, например, другой переменной. Точнее - адрес первого байта этого объекта. Это дает возможность косвенного доступа к этому объекту через указатель. Пусть x - переменная типа int. Обозначим через px указатель. Унарная операция & выдает адрес объекта, так что оператор
px = &x; присваивает переменной px адрес переменной x. Говорят, что px "указывает" на x. Операция & применима только к адресным выражениям, так что конструкции вида &(x-1) и &3 незаконны.
Унарная операция * называется операцией разадресации или операцией разрешения адреса. Эта операция рассматривает свой операнд как адрес и обращается по этому адресу, чтобы извлечь объект, содержащийся по этому адресу.
Следовательно, если y тоже имеет тип int, то y = *px; присваивает y содержимое того, на что указывает px. Так, последовательность px = &x; y = *px; присваивает y то же самое значение, что и оператор y = x; Все эти переменные должны быть описаны:
int x, y; int *px; Последнее - описание указателя. Его можно рассматривать как мнемоническое. Оно говорит, что комбинация *px имеет тип int или, иначе, px есть указатель на int. Это означает, что если px появляется в виде *px, то это эквивалентно переменной типа int. Из описания указателя следует, что он может указывать только на определенный вид объекта (в данном случае int). Разадресованный указатель может входить в любые выражения там, где может появиться объект того типа, на который этот указатель указывает. Так, оператор y = *px + 2;
присваивает y значение, на 2 больше, чем х.
Заметим, что приоритет унарных операций * и & таков, что эти операции связаны со своими операндами более крепко, чем арифметические операции, так что выражение y = *px + 2 берет то значение, на которое указывает px, прибавляет 2 и присваивает результат переменной y. Если px указывает на х, то *px = 3; полагает х равным 3, а *px + = 1; увеличивает х на 1 , также как и выражение (*px) ++
2. Понятие класса. Описание класса (С++). Поля и методы. Пример)
Объект – это переменная структурированного типа данных, включающая, как элементы данных, так и операции с этими элементами, упакованными вместе для удобства использования. Объединение данных и кода в одну конструкцию называется инкапсуляцией (encapsulation).
Класс – это структурированный тип данных или объединяющая концепция (абстракция) набора объектов (экземпляров), имеющих общие характеристики. Класс определяет семантику – общий интерфейс с окружающим миром, посредством которого можно взаимодействовать с отдельными объектами. Все экземпляры одного класса аналогичны друг другу, поскольку они имеют одинаковый интерфейс.
Классы могут быть связаны друг с другом отношениями наследования (inheritance), с их помощью количество элементов данных и/или операций с ними может увеличиваться, а описания существующих классов многократно использоваться при описании новых. Наследование является одним из механизмов, посредством которого объекты одного класса могут включаться в работу объектов другого класса.
При определенных обстоятельствах объекты могут вызывать методы-операции не только их непосредственного класса, но и любого из классов-предков, таким образом поддерживается полиморфизм (polymorphism). Может существовать несколько версий какого-то метода и один и тот же вызов этого метода может использовать различные его версии.
Особенности полей
Могут быть объявлены поля различных типов, которым при создании объекта или в процессе работы программы присваиваются конкретные значения. Комбинация значений всех полей объекта определяет состояние этого объекта. Изменение значения поля изменяет и состояние объекта. Поэтому значения полей уникальны для каждого экземпляра класса (объекта), хотя и может быть несколько объектов с полностью идентичными значениями полей.
Объявляются поля данных внутри описания класса способом, аналогичным определению полей записей и похожим на объявление обычных переменных.
Особенности методов
Как источник действий, объект использует набор методов, т.е. подпрограмм, разработанных для операций с полями. Все методы совместно опре-деляют поведение объекта. Адреса вызова некоторых методов объекта определяются на этапе компиляции программы, а других – с помощью специальной таблицы, создаваемой после инициализации программы. Каждый объект содержит указатель на такую специальную таблицу, содержащую информацию, необходимую для вызова метода. Эта таблица является принадлежностью класса и для нее выделяется память. Таким образом, методы у объектов одного класса общие.
Свойства
Для обеспечения надежности нежелателен прямой доступ к полям объекта: чтение и изменение их содержимого должно производиться посредством вызова соответствующих методов. В объектах Delphi пользователь может быть полностью отгорожен от полей с помощью свойств, в то время как поля у записи не защищены и доступны для возможного неверного использования.
Таким образом, класс представляет собой описание того, как будет выглядеть и вести себя его представитель (экземпляр или объект).
class foo {
private:
int x; // Это поле — закрытое.
int y; //Это поле — открытое.
int get_x() {return x;};
void set_x(int x) {this->x = x; };
};