Форум программистов, компьютерный форум CyberForum.ru

Перегрузка префиксного оператора инкремента с возвращающим значением - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Для заданных x и n вычислить y = ∑ x2/(2i - 1), i = от 1 до Н(Через for) http://www.cyberforum.ru/cpp-beginners/thread1084980.html
Для заданных x и n вычислить y = ∑ x2/(2i - 1), i = 1..n
C++ Как правильно записывать в динамический массив типа класса обьекты? вот банальный пример #pragma once #include "iostream" namespace Program { class Book { typedef unsigned int ui; private: http://www.cyberforum.ru/cpp-beginners/thread1084955.html
C++ Циклический сдвиг матрицы MxN
Ребята вот есть, например, матрица: 123 456 надо что бы получилось 412 563 при таком примере шаг равняется 1. Мой вариант с квадратными матрицами справляется, а вот уже с MxN, я не могу додумать :( Буду благодарен, если увидите мою ошибку.
C++ LNK2019: ссылка на неразрешенный внешний символ. Что это за ошибка?
Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ _WinMain@16 в функции ___tmainCRTStartup C:\Documents and Settings\Димон\Мои документы\Visual Studio 2010\Projects\wchar\wchar\MSVCRTD.lib(crtexew.obj) wchar
C++ Как создать чекер для проверки консольных программ http://www.cyberforum.ru/cpp-beginners/thread1084934.html
Мне нужно научиться создавать чекеры для проверки консольных программ... Где можно почитать об этом, а то везде чекеры, чекеры, но не такого типа как мне нужно.
C++ Ошибка в коде. Не могу ввести вещественное число При выполнении программы пытаюсь ввести элементы массива. Каждое число должно быть вещественным. При выполнении программы (при вводе вещественных чисел в массив) компилятор выдает ошибку (скрин прилагается). При вводе целочисленного значения массива программа работает правильно. Где-то идет несоответствие типов данных. Как можно изменить код, чтоб в массив можно было вводить число с плавающей... подробнее

Показать сообщение отдельно
yol
10 / 10 / 0
Регистрация: 13.10.2012
Сообщений: 155
29.01.2014, 23:52     Перегрузка префиксного оператора инкремента с возвращающим значением
Наткнулся на интересный код. В ссылках и указателях я разбираюсь хорошо, но я вошел в ступор при рассмотрении нижеописанного примера.
C++
1
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
45
46
47
48
49
50
51
#include <iostream>
#include <conio.h>
 
using namespace std;
 
//Объявление класса.
class Counter
{
public:
    Counter();
    ~Counter(){}
    int GetItsVal() const {return itsVal;}
    void SetItsVal(int x) {itsVal=x;}
    const Counter* GetAddr() const {return this;}
    const Counter& operator++();
 
private:
    int itsVal;
};
 
//Определение класса.
Counter::Counter():itsVal(0)
{
    cout<<"\tВызов конструктора для ("<<this<<")"<<endl;
}
 
 
const Counter& Counter::operator++()
{
    ++itsVal;
    cout<<"\t\tУвеличил!"<<endl;
    return *this;
}
 
 
int main()
{
    setlocale(LC_ALL, "rus");
    Counter i;
    cout<<"Значение i="<<i.GetItsVal()<<endl;
    ++i;
    cout<<"Значение i="<<i.GetItsVal()<<endl;
    Counter a=++i;
    cout<<"Значение i="<<i.GetItsVal()<<endl;
    cout<<"Значение a="<<a.GetItsVal()<<endl;
    
    cout<<"Адрес (i): "<<&i<<endl;
    cout<<"Адрес (a): "<<&a<<endl;
    getch();
    return 0;
}
В строке 43 создается новый экземпляр класса - "a" и, по идеи, должен вызываться конструктор, но он не вызывается - это первый момент.

Второй момент, зачем в заголовке функции стр. 28 указывается возвращаемое значение постоянной ссылки, ведь сама по себе ссылка является и так постоянной.

Третий момент, раз возвращаемое значение функции (стр. 28) является ссылка, то почему в строке 43 создается объект класса, а не ссылка?

Для интереса, я решил вывести в конце адреса объектов, проверить не одинаковы ли они (т.е. не является ли объект a ссылкой объекта i).
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru