Программирование >>  Дополнительные возможности наследования 

1 ... 86 87 88 [ 89 ] 90 91 92 ... 265


во временном объекте, прирастить значение объекта х до 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; }



1 ... 86 87 88 [ 89 ] 90 91 92 ... 265

© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика