Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Имя_класса (список параметров);



// Создается объект без имени (список может быть пустым)

имя_класса имя_объекта = выражение;

// Создается объект без имени и копируется

Примеры:

complex S (200, 300), V(50), Z;

complex X = complex (1000);

complex Y = 500;

В первом операторе создаются три объекта. Значения не указанных параметров устанавливаются по умолчанию.

Во втором операторе создается безымянный объект со значением параметра x = 1000 (значение второго параметра устанавливается по умолчанию). Выделяется память под объект Х, в которую копируется безымянный объект.

В последнем операторе создается безымянный объект со значением параметра x = 500 (значение второго параметра устанавливается по умолчанию). Выделяется память под объект Y, в которую копируется безымянный объект. Такая форма создания объекта возможна в том случае, если для инициализации объекта допускается задать один параметр.

ЗАДАЧА 3.2. Добавим в созданный в предыдущем примере класс complex конструктор:

#include <iostream>

#include <string>

#include <math.h>

const double PI=3.14159;

using namespace std;

//Объявляем класс complex. Внутри класса указаны, только прототипы методов,

//а сами функции описаны за пределами класса.

class complex

{

double x;

double y;

void show_complex();

public:

//Прототип конструктора класса.

complex();

double modul();

};

complex::complex()

{

cout<<"Vvedite x\t"; cin>>x;

cout<<"Vvedite y\t"; cin>>y;

}

double complex::modul()

{

return pow(x*x+y*y,0.5);

}

void complex::show_complex()

{

if (y>=0) cout<<x<<"+"<<y<<"i"<<endl;

else cout<<x<<y<<"i"<<endl;

}

int main()

{

//Описываем экземпляр класса, при выполнении программы после создания переменной

//автоматически вызывается констуктор.

complex chislo;

chislo.show_complex();

cout<<"Modul kompleksnogo chisla="<<chislo.modul();

return 1;

}

Если члены класса, являются массивами (указателями), то в конструкторе логично предусмотреть выделение памяти.

ЗАДАЧА 3.3. С использованием классов решить следующую задачу. Заданы координаты n точек в k-мерном пространстве. Найти точки, расстояние между которыми наибольшее и наименьшее.

Для решения задачи создадим класс prostr.

Члены класса:

• int n – количество точек;

• int k – размерность пространства;

• double **a – матрица, в которой будут храниться координаты точек, a[i][j] - i-я координата точки с номером j.

• double min – минимальное расстояние между точками в k-мерном пространстве;

• double max – максимальное расстояние между точками в k-мерном пространстве;

• int imin, int jmin – точки, расстояние между которыми минимально;

• int imax, int jmax – точки, расстояние между которыми максимально.

Методы класса:

• prostr() – конструктор класса, в котором определяются n – количество точек, k – размерность пространства, выделяется память для матрицы a координат точки и вводятся координаты точек;

• poisk_max() – функция нахождения точек, расстояние между которыми наибольшее;

• poisk_min() – функция нахождения точек, расстояние между которыми наименьшее;

• vivod_result() – функция вывода результатов: значений min, max, imin, jmin, imax, jmax;

• delete_a() – освобождение памяти выделенной для матрицы a.

В главной программе необходимо будет описать экземпляр класса и

последовательно вызвать методы poisk_min(), poisk_max(), vivod_result(), delete_a().

Текст программы:

#include <iostream>

#include <math.h>

using namespace std;

class prostr{

//Все члены класса – закрытые.

int n;

int k;

double **a;

double min;

double max;

int imin;

int jmin;

int imax;

int jmax;

//Открытые методы класса.

public:

prostr();

void poisk_min();

void poisk_max();

int vivod_result();

int delete_a();

};

prostr::prostr()

{

int i,j;

cout<<"VVedite razmernost prostrantva ";

cin>>k;

cout<<"VVedite kolichestvo tochek ";

cin>>n;

a=new double*[k];

for(i=0;i<k;i++)

a[i]=new double[n];

for(j=0;j<n;j++)

{

cout<<"VVedite koordinati "<<j<<" tochki"<<endl;

for(i=0;i<k;i++)

cin>>a[i][j];

}

}

void prostr::poisk_max()

{

int i,j,l;

double s;

for(max=0,l=0;l<k;l++)

max+=(a[l][0]-a[l][1])*(a[l][0]-a[l][1]);

max=pow(max,0.5);

imax=0;jmax=1;

for(i=0;i<n;i++)

for(j=i+1;j<n;j++)

{

for(s=0,l=0;l<k;l++)

s+=(a[l][i]-a[l][j])*(a[l][i]-a[l][j]);

s=pow(s,0.5);

if (s>max)

{

max=s;

imax=i;

jmax=j;

}

}

}

void prostr::poisk_min()

{

int i,j,l;

double s;

for(min=0,l=0;l<k;l++)

min+=(a[l][0]-a[l][1])*(a[l][0]-a[l][1]);

min=pow(min,0.5);

imin=0;jmin=1;

for(i=0;i<k;i++)

for(j=i+1;j<n;j++)

{

for(s=0,l=0;l<k;l++)

s+=(a[l][i]-a[l][j])*(a[l][i]-a[l][j]);

s=pow(s,0.5);

if (s<min)

{

min=s;

imin=i;

jmin=j;

}

}

}

void prostr::vivod_result()

{

int i,j;

for(i=0;i<k;cout<<endl,i++)

for (j=0;j<n;j++)

cout<<a[i][j]<<"\t";

cout<<"max="<<max<<"\t nomera "<<imax<<"\t"<<jmax<<endl;

cout<<"min="<<min<<"\t nomera "<<imin<<"\t"<<jmin<<endl;

}

void prostr::delete_a()

{

delete [] a;

}

void main()

{

prostr x; //Описание переменной - экземпляра класса prostr.

//Вызов метода poisk_max для поиска максимального расстояния между

//точками в k-мерном пространстве;

x.poisk_max();

//Вызов метода poisk_min для поиска минимального расстояния между

//точками в k-мерном пространстве;

x.poisk_min();

//Вызов метода vivod_result для вывода результатов

x.vivod_result();

//Вызов функции delete_a.

x.delete_a();

}

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

VVedite razmernost prostrantva 2

VVedite kolichestvo tochek 4

VVedite koordinati 0 tochki

1 2

VVedite koordinati 1 tochki

2 3

VVedite koordinati 2 tochki

4 5

VVedite koordinati 3 tochki

-7 -9

1 2 4 -7

2 3 5 -9

max=17.8045 nomera 2 3

min=1.41421 nomera 0 1





Дата публикования: 2014-11-28; Прочитано: 404 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.013 с)...