|
Хочу получить удостоверение. Сколько стоит оплата? |
Определение классов
Классы являются расширением типа struct и образуют абстрактный тип, необходимый для объектно-ориентированного программирования. Классы содержат данные и функции, оперирующие этими данными (методы классов). Ниже приводится пример простого класса stat, с помощью которого генерируется массив случайных чисел. Из объявления класса видно, что он содержит вещественый массив data и прототипы двух функций randomization и print, стоящие после служебного слова public, что означает, что эти функции доступны и вне класса. С классом связана переменная statistic. Описания функций (методов класса) располагаются вне класса (хотя можно описывать функции и всамом классе), при этом используется операция уточнения области видимости ::. Вызов функций-членов класса по значению происходит в главной функции, при этом используется оператор уточнения принадлежности к структуре (классу) точка (.). Нужно сказать что такой способ вызова методов класса не является единственным. В следующих примерах будут рассмотрены другие варианты.
//==========================================================
// Name : class_random.cpp
// Author : Marat
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//==========================================================
#include <iostream>
using namespace std;
#include<stdlib.h>
#define size 100 //Максимальный размер массива
class stat{
double data[size];
public:
//Функция генерации случайных чисел
double randomization(int m, int n);
//Функция печати
void print (int m, int n);
} statistic;
double stat::randomization(int m, int n)
{
double a;
int i;
for(i=0;i<m;i++)
{
a=(double)(rand()/((double)RAND_MAX+1)*n);
data[i]=a;
}
return data[i];
}
void stat::print(int m, int n)
{
for(int i=0;i<m;i++)
{
cout<<"\n"<<data[i];
}
cout<<"\n"<<endl;
}
int main() {
int array_size;
int range_size;
cout<<"\nEnter array size please ";
cin>>array_size;
cout<<"\nEnter range size please ";
cin>>range_size;
statistic.randomization(array_size, range_size);
statistic.print(array_size, range_size);
return 0;
}
Результат:
Enter array size please 5 Enter array range please 7 0.00875854 3.94498 1.35309 5.66101 4.09494
В следующей программе с классом stat связывается переменная statistic уже в главной функции, а не при объявлении класса, как это было в первом случае. Для печати используется параметризованная функция print. Программа сортирует вещественные массивы с помощью алгоритма пузырьковой сортировки и целочисленные массивы методом C.A.R. Hoare (алгоритм быстрой сортировки) (Г. Шилдт /Теория и практика С++).
//==========================================================
// Name : class_sort.cpp
// Author : Marat
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//==========================================================
#include <iostream>
using namespace std;
#include<stdlib.h>
class stat{
public:
void bubble (double *data, int m);//Пузырьковая сортировка
void quick(int *item, int count); //Быстрая сортировка
void qs(int *item, int left, int right);
};
//пузырьковая сортировка
void stat::bubble (double *data, int m)
{
register int a,b;
double t;
for(a=1;a<m;++a)
for(b=m-1;b>=a;--b)
{
if(data[b-1]>data[b])
{
//Перестановка значений
t=data[b-1];
data[b-1]=data[b];
data[b]=t;
}
}
}
//Входная функция быстрой сортировки
void stat::quick(int *item, int count)
{
qs(item,0,count-1);
}
//функция быстрой сортировки
void stat::qs(int *item, int left, int right)
{
register int i,j;
int x,y;
i=left;
j=right;
x=item[(left+right)/2];
do
{
while(item[i]<x && i<right) i++;
while(x<item[j] && j>left ) j--;
if(i<=j)
{
y=item[i];
item[i]=item[j];
item[j]=y;
i++;
j--;
}
}
while(i<=j);
if(left<j) qs(item,left,j);
if(i<right) qs(item,i,right);
}
template <class type> void print (type beta[], int m)
{
for(int i=0;i<m;i++)
{
cout<<" "<<beta[i];
}
cout<<"\n"<<endl;
}
int main() {
double alpha[]={1.15, 6.28, -4.75, 2.13, 0.87};
int array_size=sizeof(alpha)/sizeof(alpha[0]);
cout<<"\nOriginal matrix: ";
print(alpha,array_size);
cout<<"\nBubble sorting: ";
stat statistic;
statistic.bubble(alpha,array_size);
print(alpha,array_size);
int beta[]={1,15,3,-4,14};
int array_size_int=sizeof(beta)/sizeof(beta[0]);
cout<<"\nOriginal matrix: ";
print(beta, array_size_int);
cout<<"\nQuick sorting: ";
statistic.quick(beta, array_size_int);
print(beta, array_size_int);
return 0;
}
Результат:
Original matrix: 1.15 6.28 -4.75 2.13 0.87 Bubble sorting: -4.75 0.87 1.15 2.13 6.28 Original matrix: 1 15 3 -4 14 Quick sorting: -4 1 3 14 15