jak użyskac w main zmienna z metody w klasie transaction?

0

Witam chce zrobić coś takiego że w stringu będę miał gdzie wydalem pieniądze + ile wydałem + date + końcowy budzet. Ale tu pojawia się pewny problem zmienna ile wydałem (w programie to jest cost_of_purchasing) jest w metodzie z klasy i nie wiem jak się do niej dobrać?
main :

 if ( choice == '1' )
        {
            std::cout << "Wybrales\aa zaplate przez gotowke" << std::endl;
            std::cout << "Podaj date w ktorym zaplaciles\as gotowka" << std::endl;
            day = day_payment.day();
            month = month_payment.month();
            year = year_payment.year();
            date_final << day << "-" << month << "-" << year;
            std::cout << date_final.str() << std::endl;
            what_buy = buy.what_buying();
            budget = cost.payment_cash( budget );
            string_budget << budget;
            string_cost << 
            std::cout << "Teraz budzet wynosi: " << budget << std::endl;
            purchase = what_buy + " " + date_final.str() + " " + string_budget.str();
            std::cout << purchase << std::endl;
//            file_final.add_informatio_to_file( purchase );

W ostatnim komentarzu próbowałem czegoś takiego.
transaction.cpp

 double transactions::payment_cash( double b )
{
    double cost_of_purchasing ;
    std::cout << "ile zaplaciles\as: ";
    std::cin >> cost_of_purchasing;
    std::cout << "Tyle zaplaciles\as: " << cost_of_purchasing << std::endl;
    std::cout << "ile wynosi b: " << b << std::endl;
    b -= cost_of_purchasing;
    return b;
}

transactions.h

 #ifndef TRANSACTIONS_H
#define TRANSACTIONS_H
#include <string>


class transactions
{
public:
    char selec_cash_card_or_payment();
    double payment_cash( double b );
    double payment_cash_to_card();

    transactions();
};

#endif // TRANSACTIONS_H
4

Jeśli chcesz mieć dostęp do takiej zmiennej to uczyń ją zmienną klasy i ew. daj do niej dostęp przez gettera.

2

Poza tym pamiętaj o slashu. Nie możesz tworzyć takich łańcuchów:
"Ile zapłaciłeś\aś" - to będzie rozumiane przez kompilator jako "Ile zapłaciłeś" - tutaj znak specjalny: \a i dalej "ś". Jesli chcesz stosować backslash w stringu, to musisz wpisać dwa:
"Ile zapłaciłeś\aś"

0

kq a mógłbyś mi to trochę bardziej wyjaśnić? Bo nie rozumiem czy ci chodzi o to by w public w transaction.h umieścić tą zmienna?

0

kq a mógłbyś mi to trochę bardziej wyjaśnić? Bo nie rozumiem czy ci chodzi o to by w public w transaction.h umieścić tą zmienna?

Zmienne (pola klasy) powinny być private, a dostęp do nich, jeśli jest koniczny to zwrócenie wartości metodą lub const&.

Przykład:

class Foo {
public:
    Foo(int a, const std::string& str)
        :aPriv{ a },
        strPriv{ str }
    {
        // empty body
    }

    int getNumber()
    {
        return aPriv;
    }

    std::string getByValue()
    {
        return strPriv;
    }

    const std::string& getByReference()
    {
        return strPriv;
    }

    friend std::ostream& operator<<(std::ostream& os, const Foo& foo)
    {
        os << foo.aPriv << " " << foo.strPriv;
        return os;
    }
private:
    int aPriv;
    std::string strPriv;
};

int main()
{
    Foo f(5, "piec");
    std::cout << f << '\n';
    std::cout << f.getNumber() << ' ' << f.getByValue() << '\n';
    std::cout << f.getNumber() << ' ' << f.getByReference() << '\n';
} 
3

@carlosmay takie friendowanie operatorów nie jest dobrym pomysłem z kilku powodów:

  1. "operator wypisania" nie powinien wyświetlać niczego oprócz publicznie dostępnych danych - po co zatem friend?
  2. operatory korzystające z publicznego API (tutaj funkcja getByReference) są uniezależnione od implementacji.
0

To tak dla początkującego jak mogę wyciągnąć taką zmienna.
Zrobiłem tak może nie profesjonalnie(na pewno) ale działa:
W transactions.h dodałem zmienna double cost_of_purchasing = 0.0;
Do metody która wcześniej pytała się ile wydałem i obliczała ile po wydaniu wynosi budżet zmieniłem na:

double transactions::payment_cash( double b , double c_o_p )
{
    std::cout << "Tyle zaplaciles\as: " << cost_of_purchasing << std::endl;
    std::cout << "ile wynosi b: " << b << std::endl;
    b -= cost_of_purchasing;
    return b;
}

A w mainie zrobiłem coś takiego:

std::cin >> cost.cost_of_purchasing;
```cpp
 
1

b -= cost_of_purchasing;

Purchase cost. Bo to nie czynność zakupów kosztuje, tylko zakupiony towar.

1 użytkowników online, w tym zalogowanych: 0, gości: 1