Опубликован: 10.12.2015 | Уровень: для всех | Доступ: платный
Лекция 22:

Дружественные функции

< Лекция 21 || Лекция 22
Ключевые слова: слово, friend, функция, печать, print

Дружественные функции позволяют использовать закрытую информацию класса, не являясь членами этого класса. Эти функции, не описываемые в самом классе, могут работать с теми же ресурсами, что и функции-члены этого класса. В описании прототипа дружественных функций используется слово friend. В приводимом ниже примере сортировки методом Шелла (функция сортировки - член класса) печать производится дружественной функцией print.

//==========================================================
// Name        : friend_class.cpp
// Author      : Marat
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//==========================================================

#include <iostream>
using namespace std;

#define array_size 5

class sorting {

//Дружественная функция
friend void print(double *item, int count);

public:

void shell_sorting(double *item, int count);

};

//Функция сортировки методом Шелла
void sorting::shell_sorting(double *item, int count)
{
	register int i,j,gap,k;
	double x;
	char a[]={9,5,3,2,1};

	for(k=0;k<5;k++)
	{
		gap=a[k];
		for(i=gap;i<count;++i)
		{
			x=item[i];
			for(j=i-gap;x<item[j] && j>=0;j-=gap)
				item[j+gap]=item[j];
				item[j+gap]=x;
		}
	}
}

void print(double *item, int count);

int main() {
	double a[array_size]={0.5, 1.6, 1.4, 8.3, 5.8};
		cout<<"\nUnsorted array...";
		print(a,array_size);

		sorting data;
		data.shell_sorting(a,array_size);
		cout<<"\nArray after sorting...";
		print(a,array_size);
		cout<<"\n"<<endl;
	return 0;
}

void print(double *item, int count)
{
	for(int i=0;i<count;i++)
	{
		cout<<"\n"<<item[i];
	}
}

Результат:

Unsorted array…
0.5
1.6
1.4
8.3
5.8
Array after sorting...
0.5
1.4
1.6
5.8
8.3
< Лекция 21 || Лекция 22
Зося Ковалева
Зося Ковалева

Хочу получить удостоверение. Сколько стоит оплата?

Aleksey Aplaev
Aleksey Aplaev
Россия, Chelybinsk
Александр Сидоров
Александр Сидоров
Россия, Самара