Лабораторная работа №12

Лабораторная работа №12
Разработка и отладка алгоритмов и программ с применением декларирования классов, прямого и косвенного вызова методов.

 

Вы не можете скачивать файлы с нашего сервера


Цель: Научиться создавать и применять классы и объекты, изучить возможности объектно-ориентированного программирования
Оснащение: IBM PC, Borland C++ v5.02

Методические указания:

Класс – это структура данных, содержащая данные и функции. Данные внутри класса называют полями класса. Функции внутри класса называются методами класса. 
Подобно тому, как переменные относятся к типам данных, объекты относятся к классам. Объекты ещё называют экземплярами класса.
Общий вид объявления класса:

class имя_класса
{
  private:
  данные_и_методы;
  public:
  данные_и_методы;
  protected
  данные_и_методы;
};

Поля и методы, описанные после ключевого слова private не доступны вне пределов класса. Поля и методы, описанные после ключевого слова public не доступны вне пределов класса. C ключевым словом protected ознакомимся немного позже. 

Инициализировать поля класса начальными значениями можно как явно(тогда поля должны быть объявлены под public), так и с помощью методов. Доступ к полям и методам класса осуществляется с помощью операции . (точка), по аналогии со структурами
 
Пример 12.1. Объявление и использование класса Complex, содержащего два поля: целая часть и мнимая часть, а также содержащего метод вывода на экран в формате x+iy. 
#include <iostream>

class Complex // Объявляем класс Complex 
{
  private: 
  int re; // поле целая часть
  int im; // поле вещественная часть
  public:
  void set(int x, int y) // метод инициализации полей
  { re=x; im=y; }
  void show() // метод вывода на экран 
  { cout<<re<<” + “ <<im<<”i“<<endl; }
};

main()
{
  Complex a,b; // объявили 2 объекта – комплексные числа
  a.set(2,3); // инициализировали поля объекта a
  b.set(-3,5);  
  a.show(); // вывов метода вывода на экран в объекте a 
  b.show();
  return 0;
}

Программа выдаёт на экран следующий результат:
2 + 3i
-3 + 5i

 Поля объектов можно инициализировать с помоью конструкторов. Конструктор – это метод, имеющий имя, совпадающее с именем класса. Конструктор вызывается автоматически при создании объекта. Конструктор не возвращает результата, причём нельзя писать даже void. Существует 3 типа конструкторов: конструктор по умолчанию, конструктор с параметрами (конструктор инициализации) и конструктор копирования. Конструктор по умолчанию обнуляет все поля, не имеет аргументов и существует всегда. Конструктор по умолчанию можно задать самому, например, для инициализации строковых переменных текстом по умолчанию. Конструктор по умолчанию можно объявить самому, например, так:

 Complex()
 { re=0; im=0; } //конструктор по умолчанию обнуляет поля

Конструктор инициализации позволяет инициализировать поля. Например, конструктор инициализации для класса Complex может выглядеть так:

Complex(int x, int y)  
{ re=x; im=y; }

Тогда при создании объекта, например, в таком формате: Complex a(3,2); произойдёт вызов конструктора инициализации, который инициализирует поля re и im объекта a значениями 3 и 2 соответственно. 
 Конструктор копирования позволяет копировать один объект в другой в таком формате:

Complex a(2,3); /*объявлен объект a через конструктор инициализации */
Complex b(a); /* объявлен объект b через конструктор копирования, равный a */
Complex b=a; // аналогично предыдущему объявлению

Конструктор копирования может был объявлен так:
  Complex(Complex &a)
  {*this = a;}
Обратите внимание на то, что параметр передаётся по ссылке. Передавать по значению нельзя (аналогично массивам) ! Так же здесь используется указатель this. Указатель this всегда указывает на текущий объект и объявлять его не обязательно. Фактически это означает, что текущему объекту присваивается значение объекта a.

В одном классе может быть несколько конструкторов. Например:
class Complex
{
  private:
  int re, im; 
  public: // Конструкторы всегда public
  Complex () // Конструктор по умолчанию
  { re=0; im=0; }
  Complex (int x, int y) // Конструктор инициализации
  { re=x; im=y; }
  Complex (Complex &x) // Конструктор копирования
  { *this=x; }
};

Задания

Описать класс (классы) для структуры данных по заданию в лабораторной работе №5. Класс должен содержать конструктор по умолчанию, конструктор инициализации, конструктор копирования, метод ввода информации с клавиатуры, метод вывода информации на терминал. Все поля должны быть закрытыми, добавление и вывод информации только с помощью методов. Конструктор по умолчанию, задаёт числовые поля нулями, а текстовые текстом “NULL”. Организуйте массив объектов, инициализируйте 3 первых объекта: один конструктором по умолчанию, другой конструктором инициализации, третий конструктором копирования.



Обсудить на форуме

Комментарии к статье:

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Регистрация

Реклама

Последние комментарии