Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 15.09.2017
Сообщений: 8
1

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

26.10.2018, 21:02. Показов 1804. Ответов 2

Author24 — интернет-сервис помощи студентам
Всем добрый вечер. Возникла вот такая проблема. Я перегрузил оператор вывода и оператор постфиксного инкремента. Проблема обнаружилась при использовании их обоих вместе. В начале кода из мэйна выводятся 2 строки с элементами. Поскольку используем инкремент, то в первой строке на 1 элемент меньше должно вывестись. Но при компиляции пустая строка. При отладке понял, что при выводе компилятор работает с неинициализированной выборкой чисел, но вроде как возвращается значение в перегрузке инкремента, поэтому не совсем понимаю как должна тогда выборка передаваться в вывод

C++
1
2
3
4
Prog3_2::Sampling c;
c.SetA();
std::cout << c++ << std::endl;  // Должно быть :: 0.123 0.456 0.484 0.243 0.943
std::cout << c << std::endl;   // Должно быть :: 0.123 0.456 0.484 0.243 0.943 0.543
C++
1
2
3
4
5
6
7
8
9
10
11
class Sampling
    {
    private:
        static const int SZ = 10; // максимальный размер
        const int MAX = 32767; //максимальное число
        int length;    // 
        double numbers[SZ]; // массив случайных чисел
        public:
                Sampling() :length(5){ for (int i = 0; i < SZ; i++) numbers[i] = 0; }  
                Sampling& operator++(int); // Добавление нового числа в выборку
                friend std::ostream & operator << (std::ostream&, const Sampling&) ;
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
Sampling& Sampling::setA()
    {
        double a = 1;
        for (int i = 0; i < length; i++)
            numbers[i] = (rand() / a) / MAX;
        return *this;
    }
 
std::ostream & operator <<(std::ostream&s, const Sampling& sam) 
    {
            for (int i = 0; i < sam.length; i++)
                s << sam.numbers[i] << ' ';
        s << std::endl;
        return s;
    }
 
Sampling& Sampling:: operator++(int value)
    {
        Sampling temp(*this);
        double a;
        double d = 1;
        if (this->length < SZ)
        {
            this->length = this->length++;
            a = (rand() / d) / 32767;
            this->numbers[this->length - 1] = a;
            return temp;
        }
        else
            std::cout << "Sampling is full" << std::endl;
    }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.10.2018, 21:02
Ответы с готовыми решениями:

Перегрзука оператора постфиксного инкремента
Имеется класс фигура и класс цвет фигуры. В классе цвет фигуры перегружаются операторы ++ и --, как...

Вычисления с использованием постфиксного инкремента
не могу понять, почему при выполнении (g+e++) при g=2/e=9 получается 11 помогите пожалуйста

Использование постфиксного инкремента при присваивании
int main() { setlocale(LC_ALL,&quot;Rus&quot;); std::cout &lt;&lt; __cplusplus; cout &lt;&lt; endl; ...

Зачем перегруженному оператору постфиксного инкремента аргумент int
Доброго времени, собственно вопрос озвучен в заголовке: зачем аргумент int в данной перегрузке...

2
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
26.10.2018, 21:11 2
Лучший ответ Сообщение было отмечено s_myslov как решение

Решение

Цитата Сообщение от s_myslov Посмотреть сообщение
Sampling& Sampling:: operator++(int value)
Нужно возвращать не ссылку, а значение!!!!!!!!!!!!!!
Соответственно, хорошим тоном будет перегрузить копиконструктор и operator=

И что это за порнуха:
Цитата Сообщение от s_myslov Посмотреть сообщение
this->length = this->length++;
C++
1
this->length++;
1
0 / 0 / 0
Регистрация: 15.09.2017
Сообщений: 8
26.10.2018, 22:47  [ТС] 3
zss, Спасибо большое, осознал в чем ошибка. А эта строчка осталась от другой функции, где были разные экземпляры. Но согласен, что выглядит очень пошло
0
26.10.2018, 22:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2018, 22:47
Помогаю со студенческими работами здесь

Какой будет счетчик при использовании постфиксного инкремента?
Здравствуйте. Может это очевидно, но не могли бы пояснить, пожалуйста, в чем отличие постфиксного...

Перегрузка инкремента ++
Не понимаю как вызвать перегрузку инкремента: void operator ++( int m ); в функции main,какой...

Перегрузка инкремента
Допустим, что некий класс имеет в наличии методы пре(и пост-)фиксного инкрементов. Date&amp;...

перегрузка оператора инкремента
клас class MyRectangle{ public: int xUpLeft; int yUpLeft; int xDownRight; int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru