|
Программирование >> Дополнительные возможности наследования
во временном объекте, прирастить значение объекта х до 6, после чего возвратить значение временного объекта и присвоить его объекту а. Обратите внимание, что, поскольку речь идет о временном объекте, его следует возвращать как значение, а не как ссылку, так как временный объект выйдет из области видимости как только функция возвратит свое значение. В листинге 10.12 показано использование обоих операторов. Аисшина 10.12. Операторы нреинкрвмвита а поствнкрвмвнта 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 Листинг 10.12. Возвращение разыменованного указателя this int #include <iostream.h> class Counter { public: CounterO; -Counter(){ } int GetltsValOconst { return itsVal; } void SetltsVaKint x) { itsVal = x; > const Counter& operator++ (); оператор преинкремента const Counter operator++ (int); оператор постинкремента private; int itsVal; > ; Counter::Counter(): itsVal(O) const Counters Counter::operator++() { ++itsVal; return *this; > const Counter Counter::operator++(int x) { Counter temp( this); ++itsVal; return temp; int mainO { Counter i; cout The value of i is i.GetltsValO endl; 43 44 45 46 47 48 49 50 51 52 53 i++; cout ++i; cout Counter cout cout a = i++; cout cout return 0; The value of i is i.GetltsValO endl; The value of i is i.GetltsValO endl; I = ++i; The value of a: a.GetltsValO; and i: - I.GetltsValO endl; The value of a: a.GetltsValO; and i: i.GetltsValO endl; The value of i is 0 The value of i is 1 The value of i is 2 The value of a: 3 and i: 3 The value of a: 3 and i: 4 Щ Оператор постинкремента объявляется в строке 15 и выполняется в строках с 31 по 36. Обратите внимание, что в объявлении оператора преинкремента в строке 14 не задан целочисленный параметр х, выполняющий роль флага. При определении оператора постинкремента используется флагх, чтобы указать компилятору, что это именно постинкремент. Значение параметра х нигде и никогда не используется. Синтаксис перегрузки операторов с одном ооерандом Объявление перегруженных операторов выполняется так же, как и функций. Используйте ключевое слово operator, за которым следует сам перефужаемый оператор. В функциях операторов с одним операндом параметры не задаются, за исключением операторов постинкремента и постдекремента, в которых целочисленный параметр ифает роль флага. Пример перефузки оператора преинкремента: const CounterA Counter::operator++ {); Пример перефузки оператора постдекремента: const Coonter& Counter::operator-- (int); Ooepamop суммирования Операторы приращения, рассмотренные выще, оперируют только с одним операндом. Оператор суммирования (+) - это представитель операторов с двумя операндами. Он выполняет операции с двумя объектами. Как выполнить перефузку оператора суммирования для класса Counter? Цель состоит в том, чтобы объявить две переменные класса Counter, после чего сложить их, как в следующем примере: Counter переменная один, переменная два, переменная три; переменная три= переменная один + пвремвнная два; Начнем работу с записи функции Add(), в которой объект Counter будет выступать аргументом. Эта функция должна сложить два значения, после чего возвратить Counter с полученным результатом. Данный подход показан в листинге 10.13. йисшинг 10.13. Функция Add () 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 Лиотинг 10,13. Функция Add #inolude <iostream.h> class Counter { public; CounterO; Counter(int initialValue); CounterO{ } int GetltsValOconst {return itsVal; } void SetItsVal(int x) {itsVal = x; } Counter Add(const Counter &); private: int itsVal; Counter::Counter(int initialValue): itsVal(initialValue) Counter::Counter(): itsVal(O) Counter Counter::Add(const Counter & rhs) { return Counter(itsVal+ rhs.GetltsValO); int mainO { Counter varOne(2), varTwo(4), varlhree; varlhree = varOne.Add(varTwo); cout varOne: varOne. GetItsVal() endl; cout varTwo: varTwo.GetItsVal() endl; cout varThree: varThree. GetltsValO endl; return 0; }
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |