Russian Qt Forum

Qt => Вопросы новичков => Тема начата: UVD от Июнь 18, 2016, 14:31



Название: Переменная класса - не могу понять почему не сохраняется?
Отправлено: UVD от Июнь 18, 2016, 14:31
объявляю в классе переменную saldocredit и метод Add

Код:
class Schet {
    double saldocredit = 0;

    void Add (double summ) {
        saldocredit = saldocredit + summ;
}
}

далее есть пременная
Код:
Schet s01;

так вот при каждом обращении к методу s01.Add переменная saldocredit все время имеет нулевое начальное значение

а мне хотелось бы чтобы она помнила свое предыдущее значение

в С недавно поэтому полдня голову ломаю как быть, help!


Название: Re: Переменная класса - не могу понять почему не сохраняется?
Отправлено: gil9red от Июнь 18, 2016, 15:11
Это с++, а не си. В си нет class.

И код работает:

Код
C++ (Qt)
#include <iostream>
 
class Schet {
   public:
       double saldocredit = 0;
 
       void Add (double summ) {
           saldocredit = saldocredit + summ;
       }
};
 
int main(int argc, char *argv[])
{
   Schet s;
   s.Add(2); // 2
   std::cout << s.saldocredit << "\n";
   s.Add(2); // 4
   std::cout << s.saldocredit << "\n";
   s.Add(2); // 6
   std::cout << s.saldocredit << "\n";
 
   return 0;
}
 

И saldocredit = saldocredit + summ; можно заменить на более короткий аналог: saldocredit += summ;


Название: Re: Переменная класса - не могу понять почему не сохраняется?
Отправлено: UVD от Июнь 18, 2016, 15:51
да я в курсе про +=, но уже настолько все достало, чтто заменил явным вызовом

у меня не работает, например если заменить double saldocredit = 0; на double saldocredit = 1; то все время будет равна 1

меттод Add вызывается из других методов класса, может поэтому?


Название: Re: Переменная класса - не могу понять почему не сохраняется?
Отправлено: kambala от Июнь 18, 2016, 15:54
покажи использование переменной Schet s01; — подозреваю, что ты ее постоянно пересоздаешь


Название: Re: Переменная класса - не могу понять почему не сохраняется?
Отправлено: UVD от Июнь 18, 2016, 16:27
если обращась из  класса ProvodkaRecord, то не сохраняется!
Код:
class ProvodkaRecord {

public:
    bool SetProvodkaRecordSumm(Schet fromschet, Schet toschet, double summa) {

            //отнимаем от счета fromschet
            fromschet.Snyat(summ);
            //прибавляем к счету toschet
            toschet.Vnesti(summ);

            return true;
        }
    }


class Provodki {
private:
    vector<ProvodkaRecord> ProvodkiList;
public:
    bool AddProvodka (Schet fromschet, Schet toschet, double summa) {
        ProvodkaRecord tmp; tmp.SetProvodkaRecordSumm(fromschet, toschet, summa);
        ProvodkiList.push_back(tmp);
        return true;
    }
};



Код:
///и вызов - снятьь с s01 и добавить к s10:
MyProvodkiList.AddProvodka(s01, s10, 1200);


если напрямую к переменной класса Schet, то все ОК

Код:
    s01.Vnesti(5200);

    s01.Snyat(1200);


Название: Re: Переменная класса - не могу понять почему не сохраняется?
Отправлено: Bepec от Июнь 18, 2016, 17:06
У вас копирование происходит. Чтобы изменять в том же объекте, нужно передавать указатель, например :)


Название: Re: Переменная класса - не могу понять почему не сохраняется?
Отправлено: UVD от Июнь 18, 2016, 17:13
постепенно я начинаю понимать  ::)

однако как это должно быть написано?   ???


Название: Re: Переменная класса - не могу понять почему не сохраняется?
Отправлено: UVD от Июнь 18, 2016, 17:20
все! спасибо!!   :D

Код:
public:
    bool AddProvodka (Schet* fromschet, Schet* toschet, double summa) {


вызов
Код:
    MyProvodkiList.AddProvodka(&s01, &s10, 1200);


Название: Re: Переменная класса - не могу понять почему не сохраняется?
Отправлено: kambala от Июнь 18, 2016, 20:38
вместо указателя можно и по ссылке передавать, тогда будет
Код
C++ (Qt)
bool AddProvodka (Schet& fromschet, Schet* toschet, double summa);
 
MyProvodkiList.AddProvodka(s01, &s10, 1200);


Название: Re: Переменная класса - не могу понять почему не сохраняется?
Отправлено: UVD от Июнь 19, 2016, 05:37
да, действительно, так понятней - переделал  :)

пришлось только заменить fromschet->Snyat(summ); на fromschet.Snyat(summ);

не могу понять когда должно быть -> и когда .

просто делаю, что компилятор говорит  :(

з.ы. надо  же, вчера  часов шесть времени и килограмм нервов убил только на то, чтобы понять, что аргументты копирутся, и нужно ссылку передавать
до сих пор страшно вспомнить  :-X


Название: Re: Переменная класса - не могу понять почему не сохраняется?
Отправлено: Vamireh от Июнь 19, 2016, 11:39
-> - когда указатель
. - когда по ссылке или по значению.

Это, если по-дилетантски. А вообще, стрелка - оператор разыменования. Можно писать просто (*var).foo(), а var->foo() - вроде сокращенной записи.
Еще прикольно умные указатели: там и точка, и стрелка...


Название: Re: Переменная класса - не могу понять почему не сохраняется?
Отправлено: kambala от Июнь 19, 2016, 13:41
з.ы. надо  же, вчера  часов шесть времени и килограмм нервов убил только на то, чтобы понять, что аргументты копирутся, и нужно ссылку передавать
до сих пор страшно вспомнить  :-X
а надо всего-то С++ изучать, а не тыкаться, как слепой котенок