Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Объявление и определение функций;




};   // Определение класса завершается символом «точка с запятой»!

 

Объектно-ориентированной разработке присущи следующие характерные свойства классов и объектов:

  • инкапсуляция – объединение данных и кода в одно целое. Скрытие информации – имеется возможность запретить любой доступ к данным объекта, кроме как через его методы. Внутренняя структура объекта скрыта от пользователя;
  • наследование – возможность создавать новые классы по принципу "от общего к частному". Наследование позволяет классам-потомкам при сохранении всех свойств классов-родителей добавлять свои собственные свойства, которые отражают их индивидуальность;
  • полиморфизм – способность объектов выбирать реализацию метода на основе типов данных, принимаемых в сообщении. Объекты разных классов реагируют по-своему на одно и тоже сообщение. Это позволяет разным объектам иерархии классов реализовать своим собственным образом некоторый метод обработки данных (с одним и тем же именем для всех объектов).

 

Пример 4_1. Класс «Вектор»

Файл vector. h               // определение класса вектор,

// его данных и методов

#ifndef  _VECTOR_H        //предотвращение многократного

#define _VECTOR_H        //включения заголовочного файла

#include <iostream>

using std::endl;

using std::cout;

class VECTOR               // Класс для работы с геометрическими векторами

{

//Данные

       private:

       int x, y;        // координаты конца вектора

       //Методы

       public:

       // Присвоить значения координатам вектора: подставляемый метод -

       // определение метода дано в определении класса

       void Assign(const int &x1, const int &y1)

       {

                   x = x1; y = y1;

                   return;

       }

       // Печать значений координат вектора: объявление метода класса.

       // Определение будет дано далее.

       void print(void) const;

};    // завершение определения класса

// Определение метода print класса VECTOR

void VECTOR::print(void) const // const в конце заголовка метода –

//метод не может изменить данные класса

{

cout<<"\n Coordinates of a vector: x= "

         <<x<<" y= "<<y<<endl;

       return;

}

#endif _VECTOR_H

Файл class_vector.cpp    // использование класса «Вектор»

 

#include "vector.h"

const int N = 5;         // Число векторов в массиве

Int main()

{

       // Создаем вектор    v1 - объект класса VECTOR

       // и массив векторов v_a - массив объектов класса VECTOR

VECTOR     v1, v_a[ N ];

      

// Инициализируем и печатаем вектор v1

       v1.Assign(0, 0); cout<<"\n Vector v1: "; v1.print();

      

// Инициализируем и печатаем массив векторов v _ a

       for (int i = 0; i < N; i++)

       {

                   v_a[i].Assign(i, i+1);

                   cout<<"\n Vector v_a["<<i<<"]:";

                   v_a[i].print();

       }

cout<<endl;

       system (" pause ");

       return 0;

}

 

 


Результат работы программы:

 

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

 

Если класс не имеет конструктора, то инициализировать его объект при помощи списка значений (как структурную переменную) можно только в том случае, если все данные класса открытые (public).

 

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

 

Конструктор – это метод (функция), имя которого совпадает с именем класса. Конструктор создает и инициализирует объект класса.

Конструктор автоматически вызывается при создании объекта: на первом этапе инициализируется конструктор, на втором – тело конструктора.

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

Конструктор по умолчанию – конструктор, у которого отсутствуют параметры.

Конструктор копирования – конструктор, который вызывается: когда создается объект класса с инициализацией другим объектом; когда объект передается в функцию как параметр по значению; или когда метод класса возвращает в операторе return значение объекта.

 

Конструктор НЕ возращает значения!

 

Например, создание объекта класса VECTOR с помощью конструктора можно описать так:

Class VECTOR

{

//Данные

       private:

       int          x, y;         // координаты конца вектора

   //Методы

       public:

// Конструктор по умолчанию, без параметров.

//   Подставляемый метод

VECTOR () { x = 0; y = 0;}

// Конструктор с параметрами и инициализацией данных класса

// значениями соответствующих параметров.

//   При этом создание и инициализация объекта осуществляются

//   на первом этапе работы конструктора; второй этап отсутствует 

//   тело конструктора пусто

       VECTOR (const int &x1, const int &y1): x (x1),  y (y1){ }

      

//   можно и так (но при этом создание и инициализация объекта

//   осуществляются в два этапа работы конструктора):

//   VECTOR (const int &x1, const int &y1) { x = x1;  y = y1; }

// Конструктор копирования - вызывается при создании

// нового объекта с инициализацией другим объектом.

//   Подставляемый метод

VECTOR (const VECTOR  & copy) //объект copy - источник копирования

{

x = copy.x; y=copy.y;

}

   ...

};

 

 

При объявлении векторов, как в примере 4_1: VECTOR v 1, v _ a [ N ]; – конструктор по умочанию будет вызван 6 раз (один раз для v 1 и по одному разу длякаждого элемента массива v _ a). Все созданные объекты будут инициализированы нулевыми значениями.

Если используется определение VECTOR v 1 (10, 10) – то вызывается конструктор с параметрами и создается вектор с координатами x = 10, y = 10.

В случае определения VECTOR v 2 (v 1)  вызывается конструктор копирования и создается вектор v 2 с координатами v 1. x, v 1. y.

 

Конструктор по умолчанию и конструктор с параметрами можно объединить в один конструктор. Например, для рассматриваемого класса VECTOR:

       VECTOR (const int & x 1=0, const int & y 1=0): x (x 1), y (y 1) { }

 

Если конструктор копирования не создан разработчиком программы, то автоматически создается конструктор с поверхностным копированием. В случае с динамическими объектами копируется только указатель на объект, а копия объекта в динамической памяти не создается, что приводит к неправильной работе программы. Для примера 4_1 собственный конструктор копирования можно не создавать.

 

Деструктор – это метод (функция), имя которого совпадает с именем класса и начинается с символа ~ ( «тильда»). Деструктор предназначен для уничтожения объектов. Если конструктор не выполняет динамическое распределение памяти, то собственный деструктор кодировать не надо.

 

Деструктор вызывается не явно: когда объект класса выходит из области видимости (как переменная).

 

Деструктор всегда только один, НЕ имеет параметров и НЕ возращает значения!

 

 

Перегрузка операций для классов

 

Для того, чтобы сделать работу с объектами удобной и сответствующей предметной области использования объектов, С++ предоставляет возможность перегрузки стандартных операций для объектов пользовательских типов. Для этого следует разработать специальный метод класса (функцию-операцию) operator. Прототип такого метода в определении класса следующий:





Поделиться с друзьями:


Дата добавления: 2018-10-14; Мы поможем в написании ваших работ!; просмотров: 386 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Начинать всегда стоит с того, что сеет сомнения. © Борис Стругацкий
==> читать все изречения...

3588 - | 3384 -


© 2015-2026 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.