НГТУ, факультет РЭФ, кафедра ППиМЭ |
Лабораторный практикум «Информатика-3»Алгоритмы и программы вычислительных задачмикро- и наноэлектроники |
Лабораторная работа № 2 |
Использование классов при работес векторами и матрицами |
© Н.В.Усольцев Редакция 2007 г. Вариант № 2 от 10.09.07 |
Класс – тип данных, конструируемый программистом на основе стандартных или ранее определенных типов, влючающий в себя собственно данные и методы (функции) для работы с ними.
После определения класса в программах могут создаваться объекты данного класса, с которыми можно выполнять действия, предусмотренные методами класса. Объектно-ориентированное программирование заключается в построении иерархии классов и в алгоритмических действиях с объектами этих классов.
Класс может содержать открытые разделы (public), данные и методы которых доступны для любых функций, и закрытые разделы (private), данные и методы которых доступны только для функций (методов) данного класса. Обычно класс конструируют так, чтобы его данные располагались в закрытом разделе, а основные методы работы с ними – в открытом. Это позволяет защитить данные от непредусмотренных действий.
Класс TVector может содержать следующие данные:
- массив компонентов вектора (тип double[] или Vector);
- количество компонентов вектора (тип int).
Данные будут располагаться в закрытом разделе. Для работы с ними предусмотрим следующие методы-функции:
- voidInpVec(intcomp) - для ввода данных вектора с клавиатуры;
- voidOutVec(intcomp, intw, intp)- для вывода данных вектора на дисплей;
- voidSetVec(intcomp, VectorX) - для программного задания данных вектора из массива X с числом компонентов comp;
- voidGetVec(int& comp, VectorX) - для программного получения (взятия) данных вектора в массив Xс числом компонентов comp;
- TVectorAddVec(TVectorX, TVectorY) - для сложения двух векторов;
- TVectorSubVec(TVectorX, TVectorY) - для вычитания двух векторов;
- doubleMultVec(TVectorX, TVectorY) - для вычисления скалярного произведения двух векторов;
Описание данных и методов класса выполняется следующим образом:
Листинг 1
#include "define.h"
class TVector
{
private: // закрытый раздел
// данные класса
intn;
VectorV;
public: // открытый раздел
// методы класса
void InpVec(int);
void OutVec(int, int, int);
void SetVec(int, Vector);
void GetVec(int&, Vector);
TVector AddVec(TVector, TVector);
TVector SubVec(TVector, TVector);
double MultVec(TVector, TVector);
};
После служебного слова class располагается идентификатор (имя) класса
TVector, а затем, в фигурных скобках, описывается его состав. Закрытый раздел
private содержит данные класса: число компонентов вектора n и сам массив компонентов V. Эти идентификаторы в дальнейшем используются для доступа к данным класса в его методах. Перечисленные выше методы класса располагаются в открытом разделе public и представляют собой прототипы соответствующих функций. Следует обратить внимание, что параметрами трех последних функций и возвращаемым значением двух предпоследних является значение типа TVector, т.е. класс допускает в описании своих элементов использование типа самого себя (рекуррентное обращение).
Заголовочный файл define.h подключается для возможности использования типа Vector.
Описание класса, приведенное на листинге 1, записывается в заголовочный файл tvector.h, который подключается директивой #include ко всем функциям, использующим объекты данного класса. Можно представить следующую главную функцию, использующую объекты типа TVectorX, Y и Z:
Листинг 2
#include “tvector.h”
void main()
{
// описание данных
TvectorX,Y,Z;
...
}
Методы класса должны быть оформлены как функции языка С++. Обычно они располагаются в одном файле (файле реализации класса), который имеет то же имя, что и файл описания класса, но расширитель .cpp . Содержание файла tvector.cpp для описываемого класса приведено на листинге 3.
Листинг 3
// файл реализации класса TVector
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "tvector.h"
void TVector::InpVec(int comp)
// метод (функция) для ввода вектора с клавиатуры
{
// описание данных
int i;
// ввод вектора
if (comp>0) n=comp;
else
{
cout<<"Введите число компонентов ";
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.