Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прикладное программирование.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
439.97 Кб
Скачать

4.1.2. Передача абстрактных типов в функцию

Абстрактные типы данных, так же как и встроенные типы данных, несложно передать в функцию (по значению, по указателю, и по ссылке):

/////////////////////////////////////////////////////////////////////////////

// функция вычисления яркости, экземпляр структуры color передается по значению

int luminance1(color c)

{

return 0.212*c.red + 0.715*c.green + 0.072*c.blue;

}

/////////////////////////////////////////////////////////////////////////////

// функция вычисления яркости, экземпляр структуры color передается по ссылке

int luminance2(color& c)

{

return 0.212*c.red + 0.715*c.green + 0.072*c.blue;

}

/////////////////////////////////////////////////////////////////////////////

// функция вычисления яркости, экземпляр структуры color передается по указателю

int luminance3(color* c)

{

return 0.212*c->red + 0.715*c->green + 0.072*c->blue;

}

/////////////////////////////////////////////////////////////////////////////

Обычно абстрактные типы данных передают в функцию по ссылке, либо, если значение структуры или класса не должно измениться внутри функции – по константной ссылке.

int luminance2(const color& c)

По значению абстрактные типы данных обычно не передаются, для экономии времени на копирование данных, и для экономии памяти на размещение данных.

4.1.3. Создание функций-членов для абстрактного типа данных. Пример 4.2. Структура для работы с компонентами цвета со встроенной функцией.

Абстрактные типы данных можно снабдить своими собственными функциями для обработки своего содержимого. Например, функцию luminance можно сделать членом структуры color. Для вызова этой функции-члена структуры color нужно использовать операторы доступа . или ->, так же как и для доступа к членам-переменным:

int l=x.luminance();

При этом экземпляр x структуры color не надо дополнительно передавать в функцию, поскольку функция luminance будет автоматически иметь доступ ко всем переменным-членам структуры.

/////////////////////////////////////////////////////////////////////////////

// Прикладное программирование

// Пример 4.2. Структура для работы с компонентами цвета со встроенной функцией

// color2.h

//

// Кафедра Прикладной и компьютерной оптики, http://aco.ifmo.ru

// СПб НИУ ИТМО

/////////////////////////////////////////////////////////////////////////////

// Структура для работы с компонентами цвета со встроенной функцией

struct color2

{

// описание красной, зеленой, и синей компоненты цвета. Диапазон значений - от 0 до 255

int red, green, blue;

// функция вычисления яркости

int luminance()

{

return int(0.212*red + 0.715*green + 0.072*blue);

}

};

/////////////////////////////////////////////////////////////////////

 

/////////////////////////////////////////////////////////////////////////////

// Прикладное программирование

// Пример 4.2. Структура для работы с компонентами цвета со встроенной функцией

// test_color2.cpp

//

// Кафедра Прикладной и компьютерной оптики, http://aco.ifmo.ru

// СПб НИУ ИТМО

/////////////////////////////////////////////////////////////////////////////

#include <iostream>

using namespace std;

// подключение описания структуры

#include "color2.h"

/////////////////////////////////////////////////////////////////////////////

void main()

{

// объявление экземпляра GrayColor структуры color

// color используется как новый тип данных

color2 GrayColor;

// переменная для хранения цвета инициализирована серым цветом

GrayColor.blue=100;

GrayColor.red=100;

GrayColor.green=100;

// вычисление яркости при помощи фукнции-члена структуры

// доступ к функциям-членам осуществляется по оператору "."

cout<<GrayColor.luminance()<<endl;

// объявление указателя на экземпляр структуры color

color2 *pColor=&GrayColor;

// если объявлен указатель на экземпляр стурктуры,

// доступ к функциям-членам осуществляется по оператору "->"

cout<<pColor->luminance()<<endl; // если y – указатель на структуру

}

/////////////////////////////////////////////////////////////////////////////