Чтение онлайн

на главную - закладки

Жанры

Освой самостоятельно С++ за 21 день.

Либерти Джесс

Шрифт:

35: return temp;

36: }

37:

38: int main

39: {

40: Counter i;

41: cout << "The value of i is " << i.GetItsVal << endl;

42: i++;

43: cout << "The value of i is " << i.GetItsVal << endl;

44: ++i;

45: cout << "The value of i is " << i.GetItsVal << endl;

46: Counter а = ++i;

47: cout << "The value of а: " << a.GetItsVal;

48: cout << " and i: " << i.GetItsVal << endl;

49: а = i++;

50: cout << "The value of

а: " << a.GetItsVal;

51: cout << " and i: " << i.GetItsVal << endl;

52: return 0;

53: }

Результат:

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 не задан целочисленный параметр x, выполняющий роль флага. При определении оператора постинкремента используется флагх, чтобы указать компилятору, что это именно постинкремент. Значение параметра x нигде и никогда не используется.

Синтаксис перегрузки операторов с одним операндом

Объявление перегруженных операторов выполняется так же, как и функций. Используйте ключевое слово operator, за которым следует сам перегружаемый оператор. В функциях операторов с одним операндом параметры не задаются, за исключением операторов no- стинкремента и постдекремента, в которых целочисленный параметр играет роль флага. Пример перегрузки оператора преинкремента:

const Counter&Countcr::operator++ ;

Пример перегрузки оператора постдекремента:

const Counter&Counter::operator-- (int);

Оператор суммирования

Операторы приращения, рассмотренные выше, оперируют только с одним операндом. Оператор суммирования (+) — это представитель операторов с двумя операндами. Он выполняет операции с двумя объектами. Как выполнить перегрузку оператора суммирования для класса Counter?

Цель состоит в том, чтобы объявить две переменные класса Counter, после чего сложить их, как в следующем примере:

Counter переменная_один, переменная_два, переменная_три; переменная_три= переменная_один + переменная_два;

Начнем работу с записи функции Add, в которой объект Counter будет выступать аргументом. Эта функция должна сложить два значения, после чего возвратить Counter с полученным результатом. Данный подход показан в листинге 10.13.

Листинг 10.13. Функция Add

1: // Листинг 10.13.

2: // Функция Add

3:

4: int

5: #include <iostream.h>

6:

7: class Counter

8: {

9: public:

10: Counter;

11: Counter(int initialValue);

12: ~Counter{ }

13: int GetItsValconst {return itsVal; }

14: void SetItsVal(int x) {itsVal = x; }

15: Counter Add(const Counter &);

16:

17: private:

18: int itsVal;

19:

20: };

21:

22: Counter::Counter(int initialValue):

23: itsVal(initialValue)

24: { }

25:

26: Counter::Counter;

27: itsVal(0)

28: { }

29:

30: Counter Counter::Add(const Counter & rhs)

31: {

32: return Counter(itsVal+ rhs.GetItsVal);

33: }

34:

35: int main

36: {

37: Counter varOne(2), varTwo(4), varThree;

38: varThree = varOne.Add(varTwo);

39: cout << "var0ne: " << varOne.GetItsVal<< endl;

40: cout << "varTwo: " << varTwo.GetItsVal << endl;

41: cout << "varThree: " << varThree.GetItsVal << endl;

42:

43: return 0;

44: }

Результат:

varOne: 2

varTwo: 4

varThree: 6

Анализ:

Функция Add объявляется в строке 15. В функции задана константная ссылка на Counter, представляющая число, которое нужно добавить к текущему объекту. Функция возвращает объект класса Counter, представляющий собой результат суммирования, который присваивается операнду слева от оператора присваивания (=), как показано в строке 38. Здесь переменная varOne является объектом, varTwo — параметр функции Add, а varThree — адресный операнд, которому присваивается результат суммирования.

Чтобы создать объект varThree без исходной инициализации каким-либо значением, используется конструктор, заданный по умолчанию. Он присваивает объекту varThree нулевое значение, как показано в строках 22—24. Иначе эту проблему можно было решить, присвоив нулевое значение конструктору, определенному в строке 11.

Перегрузка оператора суммирования

Тело функции Add показано в строках 30—33. Программа работает, но несколько замысловато. Перегрузка оператора суммирования (+) сделала бы работу класса Counter более гармоничной (листинг 10.14).

Листинг 10.14. Перегрузка оператора суммирования

1: // Листинг 10.14.

2: //Перегрузка оператора суммирования (+)

3:

4: int

5: #include <iostream.h>

6:

7: class Counter

8: {

9: public:

10: Counter;

11: Counter(int initialValue);

12: ~Counter{ }

13: int GetItsValconst { return itsVal; }

14: void SetItsVal(int x) { itsVal = x; }

15: Counter operator+ (const Counter &);

Поделиться:
Популярные книги

Брак по-драконьи

Ардова Алиса
Фантастика:
фэнтези
8.60
рейтинг книги
Брак по-драконьи

Законы Рода. Том 3

Андрей Мельник
3. Граф Берестьев
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 3

Стражи душ

Кас Маркус
4. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Стражи душ

Белые погоны

Лисина Александра
3. Гибрид
Фантастика:
фэнтези
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Белые погоны

Звездная Кровь. Экзарх III

Рокотов Алексей
3. Экзарх
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Звездная Кровь. Экзарх III

Внешники такие разные

Кожевников Павел
Вселенная S-T-I-K-S
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Внешники такие разные

Адвокат Империи 4

Карелин Сергей Витальевич
4. Адвокат империи
Фантастика:
городское фэнтези
аниме
дорама
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Адвокат Империи 4

Призыватель нулевого ранга. Том 3

Дубов Дмитрий
3. Эпоха Гардара
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Призыватель нулевого ранга. Том 3

Виктор Глухов агент Ада. Компиляция. Книги 1-15

Сухинин Владимир Александрович
Виктор Глухов агент Ада
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Виктор Глухов агент Ада. Компиляция. Книги 1-15

Душелов. Том 3

Faded Emory
3. Внутренние демоны
Фантастика:
альтернативная история
аниме
фэнтези
ранобэ
хентай
5.00
рейтинг книги
Душелов. Том 3

Знойные ветры юга. Часть 1

Чайка Дмитрий
8. Третий Рим
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Знойные ветры юга. Часть 1

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга II

Идеальный мир для Лекаря

Сапфир Олег
1. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря

Кодекс Крови. Книга ХII

Борзых М.
12. РОС: Кодекс Крови
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Крови. Книга ХII