- •1. Абстрактные типы данных
- •Пример 1
- •1.4. Разработка объектов
- •1.4.1. Объекты и композиция
- •Пример 3
- •1.4.3. Объекты и наследование
- •1.4.4. Наследование в программировании
- •1.4.5. Упорядоченные списки и наследование
- •1.4.6. Повторное использование кода
- •1.4.7. Спецификации класса SeqList и OrderedList
- •1.5. Приложения с наследованием классов
- •1.6. Разработка объектно-ориентированных программ
- •1.6.1. Анализ задачи/определение программы
- •1.6.2. Разработка
- •1.6.3. Кодирование
- •1.6.4. Тестирование
- •1.6.5. Иллюстрация программной разработки: Dice график
- •Замечание
- •Программа 2. Диаграмма бросания костей
- •1.7. Тестирование и сопровождение программы
- •1.7.1. Объектное тестирование
- •1.7.2. Тестирование управляющего модуля
- •1.7.3. Программное сопровождение и документирование
- •1.9. Абстрактные базовые классы и полиморфизм
- •1.9.1. Полиморфизм и динамическое связывание
- •2.1. Пользовательский тип — класс
- •2.1.1. Объявление класса
- •Пример 1.
- •2.1.2. Конструктор
- •2.1.3. Объявление объекта
- •2.1.4. Реализация класса
- •2.1.5. Реализация конструктора
- •2.1.6. Создание объектов
- •Пример 2.
- •2.2. Примеры классов
- •2.2.1. Класс Temperature
- •2.2.2. Реализация класса Temperature
- •2.2.3. Класс случайных чисел
- •Пример 3.
- •2.2.4. Реализация класса RandomNumber
- •2.3. Объекты и передача информации
- •2.3.1. Объект как возвращаемое значение
- •2.3.2. Объект как параметр функции
- •2.4. Массивы объектов
- •2.4.1. Конструктор умолчания
- •2.5. Множественные конструкторы
- •2.5.1. Реализация класса Date
- •2.6. Практическое применение: Треугольные матрицы
- •2.6.1. Свойства верхней треугольной матрицы
- •2.6.2. Хранение треугольной матрицы
- •Пример 4.
- •Пример 5.
- •2.6.3. Класс TriMat
- •2.6.5. Реализация класса TriMat
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;