|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Объекты в качестве аргументов функций. Объекты, возвращаемые функциейРассмотрим программу: #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().
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.009 сек.) |