Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Лабораторная работа 11




Объектно-ориентированное программирование. Создание классов и объектов

 

Цель работы –научиться создавать и применять классы и объекты, изучить возможности объектно-ориентированного программирования

 

Теория

Объектно-ориентированное программирование – это способ написания программ. Парадигма объектно-ориентированного программирования состоит в следующем: определите, какие классы вам необходимы; предоставьте полный набор операций для каждого класса; общность классов выразите явно с помощью наследования.

Классы похожи на структуры языка С. Однако структура С определяет только данные, ассоциированные с этой структурой. Описание класса в языке С++ производится следующим образом:

 

class <имя класса>

{

private: <переменные-члены> // скрытая часть класса

public: <функции-члены> // общая часть класса

protected: <функции-члены> // защищенная часть класса

};

Ключевое слово class показывает компилятору, что все находящееся в фигурных скобках ({}) принадлежит объявлению класса. Не забывайте ставить точку с запятой в конце объявления класса. Имя класса можно выбрать произвольно, главное, чтобы в программе не было еще классов с таким же именем. Имя класса не должно содержать пробелов, не должно начинаться с цифры.

Класс – защищенная структура. В общем случае класс содержит 3 части: скрытую часть (private), общую часть (public) и защищенную часть (protected). Члены класса, описанные в скрытой части, доступны лишь членом этого же класса. Члены класса, описанные в общей части, доступны всем членам других классов. Члены класса, описанные в защищенной части, доступны только членам производных классов (т.е. “наследникам”).

В описании класса приводят лишь описание функций-членов (описывают только заголовки функций). Определения этих функций дается позже. Так как определение делается в глобальной области видимости, то для правильного указания на класс, необходим оператор разрешения области видимости: <имя класса>::<имя члена класса>.

Описание класса размещают в заголовочном файле. Этот файл называется также как и класс, и имеет расширение.h. Определение функций-членов класса размещают в файле с расширением.cpp.

 

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

Перед использованием объекта класса необходимо его создать, а после использования уничтожить. Для создания объекта класса можно написать обычную функцию-член класса и вызывать ее перед использованием объекта класса. Но это неудобно, да и неправильно. А что, если пользователь забудет вызвать эту функцию? Тогда при использовании объекта возникнут ошибки. Неудобно после описания объекта каждый раз вызывать специальную функцию. Да и использование этой функции неправильно с точки зрения парадигмы программирования, ведь получается, что функция применяется к объекту, который еще не создан. Поэтому необходим механизм, позволяющий вызывать функцию для создания объекта при его описании. Это специальная функция-член класса, которая называется конструктор. Итак, конструктор – специальная функция-член класса, создающая объект. Имя конструктора совпадает с именем класса. Конструктор вызывается неявно при описании объекта класса. Например: У нас определен класс vector и определен конструктор без параметров vector();. Необходимо создать объект этого класса. Описываем объект как переменную: vector V1;. Такое описание возможно, если в классе есть конструктор без параметра. Такой конструктор называют еще конструктор по умолчанию. Если в классе есть только конструктор с параметрами, то их необходимо указать в описании: vector V2(10); Если в классе описаны несколько конструкторов, то вызывается тот, чей список параметров совпадает со списком параметров при описании объекта.

Особый вид конструктора – конструктор копирования. Этот конструктор предназначен для создания объекта как копии объекта этого же класса. Параметром такого конструктора всегда является ссылка на объект этого же класса. Например, для класса vector описание конструктора копирования может выглядеть так: vector(vector& v);. Вызывается конструктор копирования также неявно следующим образом: vector V1; … vector V2=V1;

Деструктор – это специальная функция-член класса, которая разрушает объект. Деструктор также вызывается неявно. Деструктор объекта вызывается, если завершен блок, в котором объект был создан, или если завершена работа программы (для глобальных объектов). Деструкторы не имеют параметров. Имя деструктора совпадает с именем класса, но впереди добавляется символ ~. Например, ~vector();.

Пример

Описание класса (файл vector.h):

class vector

{

double * vec;

int size;

public:

vector(int n=0); //конструктор по умолчанию и с

//параметром

vector(vector&); //конструктор копирования

~vector(); //деструктор

printVector(); //функция вывода вектора на экран

int getSize() //функция, возвращающая размер вектора

{ //эта функция является функцией с

return size; //inline-подстановкой

};

double operator [] (int); //операция индексации

//элементов вектора

};

 

Определение функций-членов класса (файл vector.cpp):

#include “vector.h”

vector::vector(int n)

{

vec=new double[n]; //выделение памяти под массив

//вещественных чисел

size=n; // определение размера

}

vector::vector(vector& v) //конструктор копирования

{

if(v.size>0)

{

vec=new double[v.size];//создание нового вектора

size=v.size; //настройка размера

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

vec[i]=v.vec[i]; //копирование вектора v в

//текущий вектор

}

}

vector::~vector()

{

delete []vec; //освобождение памяти

size=-1; //размер указывает на то, что вектор разрушен

}

vector::printVector()// вывод содержимого вектора на экран

{

if(size!=-1)

{

for(int i=1;i<size;i++)

printf(“%lf ”,vec[i]);

}

}

double vector::operator [](int k) //операция индексации

{

if((k>-1)&&(k<size))

return vec[k]; //проверка индекса на правильность

else return 0;

}

 

Использование объектов

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

 

Пример

#include “vector.cpp”

#include <stdio.h>

void main()

{

vector V1(20);

vector V2=V1;

for(int i=0;i<V1.getsize();i++)

printf(“%lf ”,V1[i]);

V1.printVector();

V2.printVector();

}

 

Динамические объекты

Если создание объекта в данный момент нежелательно, но необходимо его описать, то лучше создать динамический объект. Для этого надо описать указатель на объект. Например: vector *pV;. Позднее можно будет создать этот объект при помощи операции new, например: pV=new vector(20);. Только использовать этот объект можно будет лишь через указатель на него. Для применения функции-члена к динамическому объекту нужно воспользоваться конструкцией ->(стрелочка).

 

Пример

pV->printVector();

 

Задание

1. Запустите C++Builder 6.0.

2. Напишите программу, использующую класс (классы) для структуры данных по заданию в лабораторной работе № 10. Опишите конструктор по умолчанию, конструктор с параметром, конструктор копирования, деструктор, функции добавления элемента, удаления элемента, просмотра структуры, как функции-члены класса.

3. Выполните компиляцию программы. При наличии ошибок внесите исправления.

4. Сдайте отчет преподавателю.




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


Дата добавления: 2015-08-31; Просмотров: 355; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.018 сек.