Nowe posty

xx Dystrybucja pod HP Omen (6)
Wczoraj o 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
Wczoraj o 21:08:23
lamp Problem z Linux Lite po instalacji (0)
Wczoraj o 19:50:30
xx Ile pingwinów? (1)
Wczoraj o 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

Autor Wątek: klasa źle zwraca wyniki  (Przeczytany 1480 razy)

KelThuzad

  • Gość
klasa źle zwraca wyniki
« dnia: 2016-05-19, 20:59:30 »
Witam ma problem bo mój program zwraca złą wartość na końcu(mam dwa warianty na ten program);

#include <iostream>

using namespace std;

class test
{
public:
    int number;
    int *number2;
    int m;
    int n;

    int function ( int number )
    {
        cout << "Twoja liczba to " << number << endl;
        number++;
        cout << "Po ikrementacji" << number << endl;
        return number;
    }

    int function2 ( int *number2 )
    {
        cout << "Twoja liczba to " << *number2 << endl;
        (*number2)++;
        return *number2;
    }
};

int main()
{
    test test1;

    cout << "Podaj liczne ";
    cin >> test1.number;

    test1.m = test1.function( test1.number );
    cout << "wartosc test1.number " << test1.number << endl;
    test1.number2 = &test1.m;
    cout << "wartosc test1.m " << test1.m << endl;
    cout << "wartosc wskaznika " << *test1.number2 << endl;

    test1.n = test1.function2( test1.number2 );
    cout << "Warosc test1.n" << test1.n << endl;
    cout << "wartosc test1.m " << test1.m << endl;
    cout << "Wartosc number to " << /*test1.number*/test1.m <<
            " Wartosc *number to " << /**test1.number2*/test1.n << endl;

    return 0;
}

#include <iostream>

using namespace std;

class test
{
public:
    int number;
    int *number2;

    int function( int number );
    int function2( int *number2 );
};
//================================================
int test::function( int number )
{
    number++;
    return number;
}
int test::function2( int *number2 )
{
    (*number2)++;
    cout << "po ikrementacji " << *number2 << endl;
    return *number2;
}

int main()
{
    test test1;
    cout << "Podaj lliczbe ";
    cin >> test1.number;

    test1.function( test1.number );
   
    cout << "Wartosc test1.number " << test1.number << endl;
   
    test1.number2 = &test1.number;
   
    cout << "Wartosc test1.number2 " << *test1.number2 << endl;
   
    test1.function2 ( test1.number2 );
   
    cout << "number ma " << test1.number <<
            " number2 ma " << *test1.number2 << endl;

    return 0;
}


Co jest dziwne wewnątrz funkcji number i *number2 są inkrementowane ale po opuszczeniu funkcji już nie są podniesione o 1. Nie wiem dlaczego to nie działa.
« Ostatnia zmiana: 2016-05-19, 21:07:24 wysłana przez MateuszA »

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3049
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: klasa źle zwraca wyniki
« Odpowiedź #1 dnia: 2016-05-19, 21:40:33 »
Bo w metodach parametr metody "przykrywa" składową klasy.

W function() inkrementujesz zmienną tymczasową, która znika po zakończeniu życia metody (dlatego inkrementacja nie jest widoczna po powrocie)

W function2() inkrementujesz zmienną wskazywaną przez zmienną tymczasową - choć wskaźnik znika po zakończeniu funkcji, to dane przez niego wskazywane zostały zmienione trwale.

Odpuść sobie na razie wskaźniki i skup się na ogarnięciu przepływu danych w "zwykły" sposób. Jak tego się nauczysz, dopiero zabieraj się za wskaźniki.

Z budowy function i function2 wnoszę, żę nawet w brzybliżeniu nie rozumiesz, o co chodzi w klasach.

Parę dni temu dostałeś na gmaila wrzutkę PDF, czy zabrałeś się już za lekturę?
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

KelThuzad

  • Gość
Odp: klasa źle zwraca wyniki
« Odpowiedź #2 dnia: 2016-05-19, 22:00:43 »
Żeby być szczerym to PDF idzie mi opornie bo mój angielski nie jest tak dobry ale staram sobie tłumaczyć. Ale co do książek to polecono mi 2 książki Język C++. Kompendium wiedzy i Programowanie. Teoria i praktyka z wykorzystaniem C++. Wydanie II poprawione raczej stawiam na tę 2 a później zacznę C++. Biblioteka standardowa. Podręcznik programisty. Wydanie II. I między czasie jeszcze będę tłumaczył sobie PDF. Ale co do mojej wiedzy to wdrążam ją tak jak to leci w Symfonii C++(wiem że szybko muszę ją wywalić) i tam jest tak wskaźniki a później klasy. I posiadam jeszcze taką książkę jak Programowanie w języku C ćw praktyczne i do ćwiczeń staram się zawsze dodawać coś nowego a to wskaźniki, new i delete a teraz klasy. Próbuje się uczyć na tym co mam, czekam z zakupem lepszej książki ale to i tak o ćw jest najtrudniej.

Zrobiłem sobie mały program aby zobaczyć jak działają miej więcej wskaźniki.

#include <iostream>

using namespace std;

int main()
{
    int *wsk;
    int liczba = 5;
    wsk = &liczba;
    cout << *wsk << endl;
    liczba += liczba;
    cout << liczba << endl;
    cout << *wsk << endl;
    *wsk += 4;
    cout << liczba << endl;
    cout << *wsk << endl;
    return 0;
}

Dowiedziałem się ze nieważne co robie na wskaźniku lub liczbie to zmieniają się obie wartości(Teraz to nie wiem po co one w ogóle są)

Musze teraz wrócić do programu i go poprawić.
« Ostatnia zmiana: 2016-05-24, 22:53:59 wysłana przez MateuszA »