Классы (Часть 1. Определение и описание)




1.Объекты и классы

Объектом называется совокупность разного типа данных и функций, которые их обрабатывают.

Компоненты объекта:

  • члены-данные 
  • члены-функции

Под классом понимается множество объектов, связанных общностью структуры и поведения. Таким образом, класс можно сравнить с шаблоном, по которому создаются объекты.

В С++ класс – это структурированный тип, включающий в себя в качестве элементов типизированные данные и функции, применяемые по отношению к этим данным



Например, можно объявить класс четырехугольников:


 Имя класса   FourAngel

Члены-данные

  • координаты вершин,
  • стороны,
  • периметр,
  • площадь.
 Члены-функции:

  • метод ввода координат вершин,
  • расчет длин сторон,
  • расчет площади,
  • расчет периметра. 

Затем в том же файле (или в другом) производится описание объявленных функций – членов класса.

Так как прототипы всех методов уже указаны в определении класса, то порядок описания членов-функций может быть любой. Члены-функции могут вызывать друг друга и обращаться к любым членам-данным этого класса.
На рис.: член-функция Init класса FourAngel вводит члены-данные x1, y1, x2… этого класса:



В отличие от определения обычной функции здесь имеются спецификации принадлежности к определенному кассу с использованием операции разрешения области видимости (::)

В функции main описываются конкретные экземпляры класса  (объекты) и сама программа получается очень компактной:


Здесь
         Созданы три объекта –четырехугольника f1,f2,f3, на них автоматически будет выделена память.
         Поля (координаты) объектов f1,f2 определены с помощью вызова функции Init() для этих объектов;
         Рассчитаны длины сторон первого четырехугольника.
         Рассчитана площадь первого четырехугольника.

Обратите внимание на особенности вызова:
  •  функций-членов типа void (вызов отдельным оператором)
  • функций-членов других типов (в операторах вывода на экран и  в арифметических операциях ). Например, можно написать:
S= f1.Ploshad()+ f2.Ploshad()

Вопросы №1-3 CР

  1. Создайте новый проект и впишите туда части кода, приведенные выше. Непоказанные методы оформите как "заглушки": double FourAngel::Ploshad(void){P=0; return P;}  Проверьте работоспособность проекта.
  2. Напишите   Storony(), Perimetr() и Ploshad() - функции – члены  класса FourAngel, считая, что имеете дело с прямоугольником. Заготовьте контрольный пример и, переписав очередную функцию, проверьте результат.
  3. Опишите еще один объект-прямоугольник, задайте начальные значения его данных и вызовите члены-функции для вычисления сторон, периметра и площади. 


2. Инкапсуляция

  Инкапсуляция – комбинирование и сокрытие внутри объекта данных и функций, которые их обрабатывают.

Инкапсуляция позволяет разработчику в силу различных причин скрыть от пользователя детали реализации объекта и самому в то же время делать меньше ошибок, так как доступ к членам - данным объектов обычно имеют лишь функции класса.

В С++ используются три спецификатора доступа:
         Private (сокрытый)   - Доступ извне запрещен
         Public (общедоступный)    - Доступ извне разрешен
         Protected (защищенный)  - Доступ разрешен только наследникам

Один и тот же спецификатор доступа может появляться при описании класса несколько раз.
В описанном нами примере класса все поля являются скрытыми (при попытке обращения –ошибка), а все методы –доступными извне (можно вызывать).

 Для доступа к значениям скрытых полей используется следующий прием:


Вопрос №4 СР

Доступны ли извне значения длин сторон A, B, C, D и почему?  Допишите код так, чтобы вам удалось  распечатать в функции main() значения всех сторон каждого объекта.


3.Конструкторы и деструкторы

Каждый класс имеет один или несколько конструкторов, которые вызываются автоматически при создании объекта и в этом смысле не являются методами класса. Конструктор можно описать явно и использовать для задания начальных значений полям.

Основные отличия конструктора от методов класса:
         Имя конструктора совпадает с именем класса;
         Конструктор не может иметь возвращаемого значения.

Можно определить несколько конструкторов с разным количеством параметров. Это позволит по-разному задавать значения полей создающихся объектов- экземпляров класса. 


Вопросы №5-5 СР

  1. Напишите определение класса FourAngel с конструктором. Метод Init убирать не надо. Конструктор напишите так, чтобы с помощью параметров задавались координаты вершин, лежащих на одной диагонали. Координаты двух других вершин получите, считая, что стороны прямоугольника параллельны осям координат. 
  2. С помощью конструктора задайте начальное значение координат прямоугольника f1

Комментариев нет:

Отправить комментарий