АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Объекты в качестве аргументов функций. Объекты, возвращаемые функцией

Читайте также:
  1. SWOT-анализ в качестве универсального метода анализа.
  2. VII. По степени завершенности процесса воздействия на объекты защиты
  3. А. Объекты авторского права
  4. Авторское право: понятие, объекты и субъекты
  5. Б) Вычисление тригонометрических функций.
  6. Б. Животные и незрелые в половом отношении лица как сексуальные объекты
  7. Б. Качественное исследование
  8. Базовые объекты ОС
  9. Безопасность – понятие, опасность и риск, объекты, субъекты безопасности, критерии безопасности, виды безоп., системы безоп. и их характеристика
  10. Бухгалтерский учет: понятия, объекты учета, принципы, основные задачи и организация
  11. В настоящее время наиболее часто для коммерческих предприятий в качестве цели управления финансами выступает увеличение совокупного дохода собственников.
  12. В. Раскрытие аргументов. Основная часть презентации

Рассмотрим программу:

#include <iostream>

using namespace std;

class Distance

{

private:

int feet;

float inches;

public: // конструктор без аргументов

Distance(): feet(0),inches(0.0)

{ }

// конструктор с двумя аргументами

Distance(int ft,float in): feet(ft),inches(in)

{ }

void getdist() // ввод длины пользователем

{

cout << "\nВведите число футов: "; cin >> feet;

cout << "Введите число дюймов: "; cin >> inches;

}

void showdist() // вывод длины на экран

{ cout << feet << "\'-" << inches << '\"'; }

void add_dist(Distance, Distance); // прототип

};

// сложение длин d1 и d2

void Distance::add_dist(Distance dd1, Distance dd2)

{

inches = dd1.inches + dd2.inches; // сложение дюймов

feet = 0; // с возможным заемом

if(inches >= 12.0) // если число дюймов больше 12.0,

{ // то уменьшаем число дюймов

inches -= 12.0; // на 12.0 и увеличиваем

feet++; // число футов на 1

}

feet += dd1.feet + dd2.feet; // сложение футов

}

int main()

{

Distance dist1, dist3; // две длины

Distance dist2(11, 6.25); // определение и инициализация

dist1.getdist(); // ввод dist1

dist3.add_dist(dist1,dist2); // dist3 = dist1 + dist2

// вывод всех длин

cout << "\ndist1 = "; dist1.showdist();

cout << "\ndist2 = "; dist2.showdist();

cout << "\ndist3 = "; dist3.showdist();

cout << endl;

return 0;

}

Основной блок этой программы начинается с присвоения начальных значений полям объекта dist2 класса Distance, после чего производится его сложение с экземпляром dist1, инициализируемым пользователем. Затем на экран выводятся все три экземпляра класса Distance:

Введите число футов: 17 Введите число дюймов: 5.75 dist1 = 17'-5.75" dist2 = 11'-6.25" dist3 = 29'-О"

Объекты в качестве аргументов

Методу класса всегда предоставлен доступ к полям объекта, для которого он вызван: объект связан с методом операцией точки (.). Однако на самом деле методу класса доступны и другие объекты. Если задаться вопросом, к каким объектам имеет доступ метод add_dist(), то, взглянув на вызов

dist3.add_dist(dist1, dist2);

можно заметить, что, кроме объекта dist3, из которого был вызван метод add_ dist(), он имеет доступ также и к объектам dist1 и dist2, поскольку они выступают в качестве его аргументов. Можно рассматривать объект dist3 как псевдоаргумент функции add_dist(); формально он не является аргументом, но функция имеет доступ к его полям. Когда внутри функции происходит обращение к полям inches и feet, это означает, что на самом деле обращение происходит к полям dist3.inches и dist3.feet.

Подводя итог вышесказанному, мы можем утверждать, что каждый вызов метода класса обязательно связан с конкретным объектом этого класса (исключением является вызов статической функции). Метод может прямо обращаться по имени (feet и inches в данном примере) к любым, открытым и закрытым, членам этого объекта. Кроме того, метод имеет непрямой (через операцию точки, например dist1.inches и dist2.feet) доступ к членам других объектов своего класса; последние выступают в качестве аргументов метода.

Объекты, возвращаемые функцией

В примере мы видели, что объекты можно передавать в функцию в качестве аргументов. Теперь мы рассмотрим, каким образом функция может возвратить объект в вызывающую программу. Мы модифицируем пример и в результате получим программу:

#include <iostream>

using namespace std;

class Distance

{

private:

int feet;

float inches;

public: // конструктор без аргументов

Distance(): feet(0), inches(0.0)

{ } // конструктор с двумя аргументами

Distance(int ft,float in): feet(ft),inches(in)

{ }

void getdist() // ввод длины

{

cout << "\nВведите число футов: "; cin >> feet;

cout << "Введите число дюймов: "; cin >> inches;

}

void showdist() // вывод длины

{ cout << feet << "\'-" << inches << '\"'; }

Distance add_dist(Distance); // сложение

};

// сложение данного объекта с d2, возврат суммы

Distance Distance::add_dist(Distance d2)

{

Distance temp; // временная переменная

temp.inches = inches + d2.inches; // сложение дюймов

if(temp.inches >= 12.0) // если сумма больше 12.0, то уменьшаем ее

{

temp.inches -= 12.0; // 12.0 и увеличиваем

temp.feet = 1; // число футов на 1

}

temp.feet += feet + d2.feet; // сложение футов

return temp;

}

int main()

{

Distance dist1, dist3; // две длины

Distance dist2(11, 6.25); // определение и инициализация dist2

dist1.getdist(); // ввод dist1 пользователем

dist3 = dist1.add_dist(dist2); // dist3 = dist1 + dist2

// вывод всех длин

cout << "\ndist1 = "; dist1.showdist();

cout << "\ndist2 = "; dist2.showdist();

cout << "\ndist3 = "; dist3.showdist();

cout << endl;

return 0;

}

Первый из объектов — dist1, по отношению к которому функция add_dist() является методом; второй объект — dist2, переданный в функцию в качестве аргумента. Обращение к его полям из функции выглядит как d2.feet и d2.inches. Результат сложения хранится в объекте temp и обращение к его полям выглядит как temp.feet и temp.inches. Значение объекта temp возвращается в вызывающую программу с помощью оператора return temp;

Вызывающая программа main() присваивает значение, возвращенное функцией, объекту dist3. Обратите внимание на то, что значение переменной dist1 не изменяется, а всего лишь используется функцией add_dist().

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.)