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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
AnreyKazakov
Заблокирован
#1

this возвращает неправильное значение - C++

01.10.2012, 14:57. Просмотров 524. Ответов 10
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
using namespace std;
class oops{
    public:
    oops():key(10){}
    int key;
    oops& oper1(int &roll){
        roll*=key;
        return *this;
        }
    int oper2(int roll2){
        roll2+=10;
        return roll2;
        }
    };
    int main(){
        class oops cls1;
        cout<<"enter value: ";
        int k=0;cin>>k;
        cout<<(cls1.oper1(k).oper2(k))<<endl;
        return 0;   
        }
Разбираюсь с this... Пока не очень выходит... Есть кусок кода сверху, но он работает не так как надо. По задумке когда вводишь к=12, на экране должно появляться 130, а выходит 22, такое чувство, что первую функцию как-будто пропускает (oper1)....
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.10.2012, 14:57     this возвращает неправильное значение
Посмотрите здесь:

Почему функция возвращает неправильное значение - C++
Пробовал дебажил функцию и каждый раз проверка проходит условие, хотя оно выполняется... в итоге возвращается false //проверка...

неправильное значение переменной - C++
вот код #include &quot;stdafx.h&quot; #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int _tmain(int argc,...

Неправильное значение в атрибуте класса - C++
всем доброго времени суток. пишу курсовую - программа-калькулятор двоичных чисел. заметил несколько проблем. в функции f_2_to_10 не...

Неправильное значение итератора end() - C++
Здравствуйте! Создаю лист и итератор. Заполняю структуру данными. Передаю в функцию пустой контейнер - лист и данные структуры, чтобы...

Програмка выдает неправильное значение - C++
Здравствуйте форумчане, относительно недавно стал изучать C++ как хобби. Изучив немного операторов решил закрепить знания написав...

Неправильное значение объема конуса - C++
В чем проблема? Комментарии в коде: #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;locale&gt; using namespace...

Неправильное возвращаемое значение функции time - C++
что за бардак мне time возвращает??? что типа щас 10 месяц, а год вообще 114 :D пишу так: time_t t; time(&amp;t); tm tt; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KATbIK
86 / 81 / 10
Регистрация: 02.08.2011
Сообщений: 335
01.10.2012, 15:04     this возвращает неправильное значение #2
не знаю у меня твой код 130 выводит.
AnreyKazakov
Заблокирован
01.10.2012, 15:11  [ТС]     this возвращает неправильное значение #3
Цитата Сообщение от KATbIK Посмотреть сообщение
не знаю у меня твой код 130 выводит.
Как так, а какой компилятор? среда?
У меня Джини, MinGW компилятор.... Вот не хочет и все =(((
KATbIK
86 / 81 / 10
Регистрация: 02.08.2011
Сообщений: 335
01.10.2012, 15:28     this возвращает неправильное значение #4
IDE devcpp, компиль mingw v4
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
01.10.2012, 15:35     this возвращает неправильное значение #5
Да, у меня тоже 22 выводит при вводе 12 (компилятор от VS2012). Но вот в следующем коде - 130:
C++
1
2
3
4
5
6
7
8
9
10
11
int main()
{
    class oops cls1;
    cout<<"enter value: ";
    int k=0;cin>>k;
    cls1.oper1(k);
    cout<<cls1.oper2(k)<<endl;
    //cout<<(cls1.oper1(k).oper2(k))<<endl;
    system("pause");
    return 0;
}
AnreyKazakov
Заблокирован
01.10.2012, 16:17  [ТС]     this возвращает неправильное значение #6
Цитата Сообщение от yuron_477 Посмотреть сообщение
(cls1.oper1(k).oper2(k))
Блин, в учебнике не такой конечно пример, но очень похожий, там oper1 меняет координаты курсора, а oper2 его туда перемещает, можно конечно так сделать, но это не красиво =( код раздует потом, когда переменных много будет... я думаю...
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
#include <iostream>
using namespace std;
class oops{
    public:
    oops():key(10),roll2(0){}
    int key;
    int roll2;
    oops& oper1(int &roll){
        roll*=key;
        roll2=roll;
        return *this;
        }
    int oper2(){
        roll2+=10;
        return roll2;
        }
    };
    int main(){
        class oops cls1;
        cout<<"enter value: ";
        int k=0;cin>>k;
        cout<<(cls1.oper1(k).oper2())<<endl;
        return 0;   
        }
Может есть более легкое избавление от такое проблемы?

Добавлено через 5 минут
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
cout<<(cls1.oper1(k).oper2())<<endl;
PS Нужно чтобы именно в таком виде вызов был
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
01.10.2012, 16:46     this возвращает неправильное значение #7
Можно попробовать в oper2 передавать аргумент тоже по ссылке:
C++
1
2
3
4
int & oper2(int &roll2){
    roll2+=10;
    return roll2;
}
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.10.2012, 16:47     this возвращает неправильное значение #8
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
Нужно чтобы именно в таком виде вызов был
AnreyKazakov, такие конструкции нежелательны. Тут, если я правильно понял, проблема связана с, так называемыми, точками следования. Можно здесь почитать. http://alenacpp.blogspot.com/2005/11...ce-points.html
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
01.10.2012, 16:52     this возвращает неправильное значение #9
возможно это связанно с оптимизациями или с неопределенным порядком вычисления аргументов для функций. в стандарте о порядке вроде бы ничего не говорится.
если поразмышлять, почему получается 22, то в голову приходит мысль о том, что перед вызовом oper1 вычислился аргумент для oper2 (к = 12) и запомнился где-то. далее идет вызов oper1 и потом oper2, но вот в oper2 передается не то, что в этой переменной, а то, что было вычисленно заранее. т.е. 12. и получается, что функция возвращает 22.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.10.2012, 17:07     this возвращает неправильное значение #10
Это оно и есть: undefined behavior.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.10.2012, 17:09     this возвращает неправильное значение
Еще ссылки по теме:

Элементы структуры: неправильное значение после 10 элемента - C++
При создании массива из собственной структуры, после 10 элемента, начинает неправильно заполняться одно из полей (Target). using...

Где нужно писать сообщение об ошибке, если ввели неправильное значение? - C++
простите за глупый вопрос, но где нужно писать сообщение об ошибке, если ввели неправильное значение, перепробовала кучу вариантов, никак ...

Не возвращает значение - C++
Здравствуйте! Помогите люди добрые?) Вообщем, нужно написать на Visual C++ библиотеку? а после запустить ее на Лабвью Код есть...

Подпрограмма не возвращает значение - C++
Отрывок программы. Не возвращает значение pr (в подролграмме считает по-новому , но в соновной записывает по старому) * * * ...

Функция не возвращает значение - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int ca(int a) { int i,r; r = 0; ...


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

Или воспользуйтесь поиском по форуму:
AnreyKazakov
Заблокирован
01.10.2012, 17:09  [ТС]     this возвращает неправильное значение #11
Цитата Сообщение от alsav22 Посмотреть сообщение
Можно здесь почитать. http://alenacpp.blogspot.com/2005/11...ce-points.html
Такая статья классная, особенно пример понравился:
C++
1
2
3
4
5
int x;
x = 3;
cout << (++ x + ++ x) + ++ x << endl;
x = 3;
cout << ++ x + (++ x + ++ x) << endl;
gcc 3.4.4:
16
18
Получилось, что операция сложения не ассоциативна!

Ахахах, как такое можно было придумать
Yandex
Объявления
01.10.2012, 17:09     this возвращает неправильное значение
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru