Джесс Либерти - Освой самостоятельно С++ за 21 день.

Здесь есть возможность читать онлайн «Джесс Либерти - Освой самостоятельно С++ за 21 день.» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Освой самостоятельно С++ за 21 день.: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Освой самостоятельно С++ за 21 день.»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

В книге широко представлены возможности новейшей версии программного продукта Microsoft Visual C++. Подробно описаны средства и подходы программирования современных профессиональных приложений. Материалы книги дополнены многочисленными демонстрационными программами, в процессе разработки которых максимально используются возможности программных инструментов Microsoft Visual Studio. Особое внимание уделено новинкам версии 6.0 и новейшим технологиям объектно-ориентированного программирования, включая использование библиотеки MFC и шаблонов классов, а также создание связанных списков. Отдельное занятие посвящено вопросам объектно-ориентированного анализа и проектирования приложений. Подробно рассмотрены все средства и подходы конструирования собственных пользовательских классов.
Книга рассчитана на широкий круг читателей, интересующихся современными проблемами программирования.

Освой самостоятельно С++ за 21 день. — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Освой самостоятельно С++ за 21 день.», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

В отличие от обычной переменной типа int, объект класса Counter не может использоваться в операциях приращения, прибавляться, присваиваться или подвергаться другим манипуляциям. В связи с этим выведение значения данного объекта на печать также сопряжено с рядом трудностей.

Запись Функции инкремента

Ограничения использования объекта нового класса, которые упоминались выше, можно преодолеть путем перегрузки операторов. Например, существует несколько способов восстановления возможности приращения объекта класса Counter. Один из них состоит в том, чтобы перегрузить функцию инкрементации, как показано в листинге 10.7.

Листинг 10.7. Добавление в класс оператора инкремента

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

2: // Добавление в класс Counter оператора инкремента

3:

4: int

5: #include

6:

7: class Counter

8: {

9: public:

10: Counter();

11: ~Counter(){ }

12: int GetItsVal()const { return itsVal; }

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

14: void Increment() { ++itsVal; }

15:

16: private:

17: int itsVal;

18:

19: };

20:

21: Counter::Counter():

22: itsVal(0)

23: { }

24:

25: int main()

26: {

27: Counter i;

28: cout << "The value of i is " << i.GetItsVal() << endl;

29: i.Increment();

30: cout << "The value of i is " << i.GetItsVal() << endl;

31: return 0;

32: }

Результат:

The value of i is 0

The vglue of i is 1

Анализ:В листинге 10.7 добавляется функция оператора инкремента, определенная в строке 14. Хотя программа работает, выглядит она довольно неуклюже. Программа из последних сил старается перегрузить ++operator, но это можно реализовать другим способом.

Перегрузка префиксных операторов

Чтобы перегрузить префиксный оператор, можно использовать функцию следующего типа:

returnType Operator op (параметры)

В данном случае ор — это перегружаемый оператор. Тогда для перегрузки оператора преинкремента используем функцию

void operator++ ()

Этот способ показан в листинге 10.8.

Листинг 10.8 Перегрузка оператора преинкремента

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

2: // Перегрузка оператора преинкремента в классе Counter

3:

4: int

5: #include

6:

7: class Counter

8: {

9: public:

10: Counter();

11: ~Counter(){ }

12: int GetItsVal()const { return itsVal; }

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

14: void Increment() { ++itsVal; >

15: void operator++ () < ++itsVal; }

16:

17: private:

18: int itsVal;

19:

20: };

21:

22: Counter::Counter():

23: itsVal(0)

24: { }

25:

26: int main()

27: {

28: Counter i;

29: cout << "The value of i is " << i.GetItsVal() << endl;

30: i.Increment();

31: i cout << "The value of i is " << i.GetItsVal() << endl;

32: ++i;

33: cout << "The value of i is " << i.GetItsVal() << endl;

34: return 0;

35: }

Результат:

The value of i is 0

The value of i is 1

The value of i is 2

Анализ:В строке 15 перегружается operator++, который затем используется в строке 32 в результате объект класса Counter получает функции, которые можно было ожидать судя по его названию. Далее объекту сообщаются дополнительные возможности, призванные повысить эффективность его использования, в частности возможность контроля за максимальным значением, которое нельзя превышать в ходе приращения.

Но в работе перегруженного оператора инкремента существует один серьезный недостаток. В данный момент в программе не удастся выполнить следующее выражение:

Counter а = ++i;

В этой строке делается попытка создать новый объект класса Counter — а, которому присваивается приращенное значение переменной i. Хотя встроенный конструктор- копировщик поддерживает операцию присваивания, текущий оператор инкремента не возвращает объект класса Counter. Сейчас он возвращает пустое значение void. Невозможно присвоить значение void объекту класса Counter. (Невозможно создать что-то из ничего!)

Типы возвратов перегруженных функций операторов

Все, что нам нужно, — это возвратить объект класса Counter таким образом, чтобы ero можно было присвоить другому объекту класса Counter. Как это сделать? Один подход состоит в том, чтобы создать временный объект и возвратить его. Он показан в листинге 10.9.

Листинг 10.8. Возвращение временного объекта

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

2: // Возвращение временного объекта

3:

4: int

5: #include

6:

7: class Counter

8: {

9: public:

10: Counter();

11: ~Counter(){ }

12: int GetItsVal()const { return itsVal; }

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

14: void Increment() { ++itsVal; }

15: Counter operator++ ();

16:

17: private:

18: int itsVal;

19:

20: };

21:

22: Counter::Counter():

23: itsVal(0)

24: { }

25:

26: Counter Counter::operator++()

27: {

28: ++itsVal;

29: Counter temp;

30: temp.SetItsVal(itsVal);

31: return temp;

32: }

33:

34: int main()

35: {

36: Counter i;

37: cout << "The value of i is " << i.GetItsVal() << endl;

38: i.Incrernent();

39: cout << "The value of i is " << i.GetItsVal() << endl;

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Освой самостоятельно С++ за 21 день.»

Представляем Вашему вниманию похожие книги на «Освой самостоятельно С++ за 21 день.» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Освой самостоятельно С++ за 21 день.»

Обсуждение, отзывы о книге «Освой самостоятельно С++ за 21 день.» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x