Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Абстрактные классы.rtf
Скачиваний:
6
Добавлен:
10.07.2019
Размер:
2.25 Mб
Скачать

2.3. Объекты и передача информации

Объект является экземпляром типа данных и как таковой может передаваться в качестве параметра функции или возвращаться как значение функции. Подобно другим типам С++, объектный параметр может передаваться по значению или по ссылке. Положения этого раздела иллюстрируются примерами из класса Temperature.

2.3.1. Объект как возвращаемое значение

Любой тип класса может быть возвращаемым типом функции. Например, функция SetDailyTemp принимает в качестве параметра массив чисел, представляющий показания температуры, извлекает максимальное и минимальное показания из списка и возвращает объект Temperature с этими крайними значениями.

Temperature SetDailyTemp(float reading[], int n)

{

//создание t с 1-ми значениями high и low

Temperature t(reading[0], reading[0]);

//обновление high или low, если необходимо

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

t.UpdateTemp(reading[i]);

//возвращение t с крайними температурами этого дня

return t;

}

Массив reading содержит шесть температурных значений. Для определения высокой и низкой температур вызовите SetDailyTemp и присвойте результат объекту today. Чтобы вывести эти температуры на экран, используются методы GetHighTemp и GetLowTemp.

float reading[6]={40,90,80,60,20,50};

Temperature today=SetDailyTemp(reading,6);

cout << "Сегодняшние высокая и низкая температуры такие"

<< today.GetHighTemp() << "и"

<< today.GetLowTemp() << endl;

2.3.2. Объект как параметр функции

Объекты могут передаваться как параметры функции по значению или по ссылке. Следующие примеры иллюстрируют соответствующий синтаксис.

Функция TemperatureRange использует вызов по значению (call by value) параметра Т типа Temperature и возвращает разницу между самой высокой и самой низкой температурами. При выполнении этой функции вызывающий элемент копирует объект типа Temperature (фактический параметр) в Т.

float TemperatureRange(Temperature T)

{

return T.GetHighTemp()-Т.GetLowTemp();

}

Функция Celsius использует вызов по ссылке (call by reference) параметра Т типа Temperature, который, как первоначально подразумевалось, содержит значения по Фаренгейту. Функция создает объект типа Temperature, чьи самое высокое и самое низкое показания преобразуются в значения по Цельсию, и присваивает его объекту Т.

void Celsius(Temperature& T)

{

float hi, low;

//с = 5/9*(f-32)

hi = float(5)/9*(T.GetHighTemp() -32);

low = float(5)/9*(T.GetLowTemp() -32);

T = Temperature(hi, low);

}

Пример: объект Water содержит точку кипения (212° по Фаренгейту) и точку замерзания (32° по Фаренгейту) воды в качестве самого высокого и самого низкого температурных значений. Результат использования функции TemperatureRange показывает, что 180° - это диапазон для воды по шкале Фаренгейта. С помощью функции Celsius преобразуем эти температуры в значения по Цельсию и вызовем TemperatureRange, чтобы показать, что 100° - это соответствующий диапазон по шкале Цельсия,

Temperature Water(212, 32);// кипение при 212F,замерзание

// при 32F

cout <<"Температурный диапазон воды по шкале Фаренгейта"

<< TemperatureRange(Water) << endl;

Celsius(Water); //преобразование температуры по Фаренгейту

//в температуру по Цельсию

cout <<"Температурный диапазон воды по шкале Цельсия"

<< TemperatureRange(Water) << endl;