
- •Часть 1. Основы создания программ в Си Лекция.1.Язык Си
- •Технология разработки программ
- •Базовые элементы языка Си
- •Представление данных в Си
- •Встроенные типы данных
- •Переменные
- •Операции и выражения
- •Функции
- •Лекция.2.Язык Си Обзор элементов языка Си Типизированные константы
- •Область действия переменных
- •Управляющие конструкции с
- •Массивы и указатели
- •Типы, определяемые пользователем
- •Лекция.3.Препроцессор и отладка программ
- •Макроопределения
- •Условная компиляция
- •1. Предотвращение включения файлов
- •Отладка программ
- •Элементы отладки
- •Лекция.1.Объектно-ориентированное программирование
- •Что такое объектно-ориентированное программирование
- •Пример определений классов
- •Конструктор и деструктор
- •Элементы класса
- •Элементы-функции
- •Элементы данных
- •Класс как область действия
- •Указатель this
- •Лекция.3.Элементы класса Статические элементы класса
- •Статические элементы-функции
- •Специальные элементы-функции класса
- •Конструктор
- •Список инициализации элементов
- •Конструктор копии
- •Операция присваивания
- •Деструктор
- •Операции класса new и delete
- •Функции преобразования
- •Ключевое слово explicit
- •Операции приведения
- •Доступ к базовым классам
- •Простое наследование
- •Конструкторы, деструкторы и наследование
- •Сложное наследование
- •Неоднозначности при сложном наследовании
- •Виртуальные базовые классы
- •Виртуальные функции
- •Чисто виртуальные функции и абстрактные классы
- •Реализация виртуального механизма
- •Лекция.5.Семинар 1-2: Обработка исключений
- •Объекты-исключения
- •Повторное возбуждение исключения
- •Перехват всех исключений
Элементы класса
Приведенный код заголовочного файла — это так называемый интерфейс класса. В определении класса объявляются обычно лишь прототипы функций-элементов. Чтобы класс стал работоспособным, необходима еще его реализация. Реализация класса, располагаемая в отдельном файле, содержит код его элементов-функций.
Элементы-функции
Элемент-функция класса или просто функция класса объявляется внутри определения класса. Там же может быть расположено и определение тела функции. В этом случае функцию называют встроенной и компилятор будет генерировать ее встроенное расширение на месте вызова. Если определение функции располагается вне тела класса, то к ее имени добавляется префикс, состоящий из имени класса и операции разрешения области действия.
Вот несколько модифицированный класс Point из предыдущей главы вместе с его реализацией:
#include <assert.h>
const int MaxX = 200; // Максимальные значения координат,
const int MaxY = 200; //
struct Point // Класс точек,
{
private:
int fx;
int fy; public:
int getX(void) { return fx; }
int getY(void) { return fy; }
void setPoint(int, int);
};
В файле кода размещаем реализацию функции setPoint
#include “Classesl.h”
void Point::setPoint (int x, int y)
{
assert(x >= 0 && x < MaxX);
assert(y >= 0 && у < MaxY);
fx = x;
fy = y;
}
Т.о. обе функции get() определены как встроенные, а функция setPoint() определяется вне тела класса и не является встроенной
Элементы данных
Элементы данных аналогичны элементам структур языка С. Стоит добавить следующее:
Они не могут быть объявлены как auto, extern или register;
Они могут быть перечислениями, битовыми полями, а также объектами ранее объявленных классов.
Элемент данных класса не может быть представителем самого класса.
Элемент данных класса может быть указателем или ссылкой на сам класс.
Класс как область действия
В языке С выделялось несколько различных типов области действия: глобальная, файл, функция, блок, прототип. В C++ вводится новый вид области действия — класс. Имена элементов класса расположены в области действия класса, и из функций данного класса к ним можно обращаться непосредственно. Получить доступ к элементам класса можно в следующим образом:
Для существующего представителя класса с помощью операции доступа к элементу (точки).
Через указатель на существующий представитель с помощью операции косвенного доступа к элементу (стрелки).
class Time
{
public:
int hour;
int min;
void setTime(int h, int m)
{ hour = h; min = m; }
void showTime(void)
{ printf ("Time: %02d: %02d. \n", hour, min);}
};
#include “MyTime.h”
int main ()
{
Time start; // Локальный объект Time.
Time *pTime = Sstart; // Указатель на локальный объект*.
start.hour = 17; // Операция доступа к элементу.
pTime->min = 30; // Косвенный доступ к элементу.
start.setTime(17, 15); // Вызов элемента для объекта start.
pTime->showTime(); // Вызов элемента через указатель на объект.
return 0;
}
К функциям класса можно обращаться из функций того же класса просто по имени. Обычные функции и функции других классов могут вызывать функции данного класса для существующих его представителей с помощью операций "." или "->" (при использовании указателя).