Хочу получить удостоверение. Сколько стоит оплата? |
Определение классов
Классы являются расширением типа 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