C++ dodanie dwóch zmniennych daje w wyniku dwa zera

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
huberthx
Sędziwy Jeż
Sędziwy Jeż
Posty: 71
Rejestracja: 25 lip 2010, 22:26
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86_64

C++ dodanie dwóch zmniennych daje w wyniku dwa zera

Post autor: huberthx »

Witam oto kod:
klasy.h

Kod: Zaznacz cały

#ifndef KLASA_H
#define KLASA_H
class licznikb;
class licznika
{
public:
    licznika* obiektlicznika;
    float a;
    float pobierza();
    licznika() {licznika* obiektlicznika;};
    ~licznika() {};
};
class licznikb
{
public:
    licznikb* obiektlicznikb;
    float b;
    float pobierzb();
    licznikb() {licznikb* obiektlicznikb;};
    ~licznikb() {};
};
class dodawanie : public licznika, public licznikb
{
public:
    licznika* obiektlicznika;
    licznikb* obiektlicznikb;
    dodawanie* obiektdodawanie;
    float wynik;
    float dodaj();
    dodawanie() {licznika* obiektlicznika; licznikb* obiektlicznikb; dodawanie* obiektdodawanie;};
    ~dodawanie() {};
};

#endif // KLASA_H
metody.cpp

Kod: Zaznacz cały

#include <iostream>
#include "klasa.h"
float licznika::pobierza()
{
    std::cin >> a;

    return a;
};
float licznikb::pobierzb()
{
    std::cin >> b;
    return b;
};

float dodawanie::dodaj()
{
    std::cout << (a + b);

};
main.cpp

Kod: Zaznacz cały

#include <iostream>
#include "klasa.h"
main()
{
    dodawanie *obiektdodawanie = new dodawanie;
    licznika* obiektlicznika = new licznika;
    licznikb* obiektlicznikb = new licznikb;
    obiektlicznika->pobierza();
    obiektlicznikb->pobierzb();

    std::cout << obiektdodawanie->dodaj();
    delete obiektdodawanie;
    delete obiektlicznika;
    delete obiektlicznikb;

}
Problem polega na tym, że po wprowadzeniu danych liczbowych jako wynik otrzymuję dwa zera. Zastanawia mnie też to, że gdy dodawanie przypisywałem do innej zmiennej w wyniku pojawiało się jedno zero.
Dopiero uczę się o wskaźnikach więc bardzo możliwe, że w kodzie są błędy ale jakie nie wiem. Z drugiej strony w innym kodzie z jedną klasą wykonującym też proste obliczenia w wyniku również otrzymuję same zera. Jako kompilatora używam QtCreator.
Za pomoc wielkie dzięki
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

Odp: C++ dodanie dwóch zmniennych daje w wyniku dwa zera

Post autor: kabanek »

po pierwsze w tych momentach

Kod: Zaznacz cały

float licznikb:obierzb()
{
    std::cin >> b;
    return b;
};
średnik na końcu jest zbędny

po 2 umieszczaj kod w znaczniki

Kod: Zaznacz cały

 [ CODE][ /CODE] 
po 3 Twój kod mi się nie chce kompilować. Dostaję błąd
metody.cpp:3: error: expected initializer before ‘:’ token
metody.cpp:9: error: expected initializer before ‘:’ token
a po 4 chyba trochę nakombinowałeś z tym dziedziczeniem. Klasa dodawanie dziedziczy po klasach licznikb oraz licznika. To ok. Potem klasa dodawanie ma w sobie dwa wskaźniki do tych 2 klas a nigdzie ich nie wykorzystujesz ;-)

także w ogóle masz kod nieco zamieszany. Możesz spokojnie wywalić z klasy dodawanie to:

Kod: Zaznacz cały

        licznika* obiektlicznika;
        licznikb* obiektlicznikb;
        dodawanie* obiektdodawanie;
i przy okazji mienić konstruktor oraz to co jest w main.cpp w np coś takiego

Kod: Zaznacz cały

#include <iostream>
#include "klasa.h"

main()
{
    dodawanie *obiektdodawanie = new dodawanie;
    obiektdodawanie->pobierza();
    obiektdodawanie->pobierzb();

    std::cout << obiektdodawanie->dodaj();
    delete obiektdodawanie;
}
jeśli nie wiesz dlaczego main.cpp tak powinien wyglądać to spróbuj się zastanowić i potem zapytaj :grin:
huberthx
Sędziwy Jeż
Sędziwy Jeż
Posty: 71
Rejestracja: 25 lip 2010, 22:26
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: C++ dodanie dwóch zmniennych daje w wyniku dwa zera

Post autor: huberthx »

kabanek dziękuję za zainteresowanie tematem. Po przeróbce kodu według twoich założeń program działa. Mi jednak chodziło tak naprawdę o to aby obiekty klasy licznika i licznikb potrafiły współpracować z obiektem klasy dodawanie. Czy to jest w ogóle możliwe ? W książce z której się ucze wiele wspominają o relacjach między obiektami, że to jest bardzo ważny aspekt OOP-u itd... dlatego właśnie napisałem ten kod aby takie relacje zbudować jednak mi się nie udało. Czy ktoś mógłby mnie jakoś naprowadzić co zrobić aby te relacje w tym kodzie zbudować?
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

Odp: C++ dodanie dwóch zmniennych daje w wyniku dwa zera

Post autor: kabanek »

zależy o jakie relacje Ci chodzi. Może o takie coś

Kod: Zaznacz cały

#include <iostream>

using namespace std;

class Klasa1
{
    public:
        int Zmienna1;
        
        void podwojWartoscZmiennej1()
        {
            Zmienna1 = Zmienna1 * 2;
        }
};

class Klasa2
{
    public:
        int Zmienna2;
};

class GlownaKlasa : public Klasa1, public Klasa2
{
    public:
        GlownaKlasa(int zm1, int zm2) {Zmienna1 = zm1, Zmienna2 = zm2;}
        
        int dodawanie()
        {
            return Zmienna1 + Zmienna2;
        }
        
        int mnozenie()
        {
            return Zmienna1 * Zmienna2;
        }
};

int main()
{
    GlownaKlasa klasa(10,50);
    
    cout<<klasa.Zmienna1<<" " <<klasa.Zmienna2<<endl;
    cout<<klasa.dodawanie()<<endl;
    cout<<klasa.mnozenie()<<endl;
    cout<<"\nTeraz podwajamy wartosci zmiennej w klasie Klasa1"<<endl;
    klasa.podwojWartoscZmiennej1();
    cout<<klasa.Zmienna1<<" " <<klasa.Zmienna2<<endl;
    cout<<klasa.dodawanie()<<endl;
    cout<<klasa.mnozenie()<<endl;
    
    return 0;
}
huberthx
Sędziwy Jeż
Sędziwy Jeż
Posty: 71
Rejestracja: 25 lip 2010, 22:26
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: C++ dodanie dwóch zmniennych daje w wyniku dwa zera

Post autor: huberthx »

Chodziło mi raczej o powiązania między obiektami z wykorzystaniem wskaźników.
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

Odp: C++ dodanie dwóch zmniennych daje w wyniku dwa zera

Post autor: kabanek »

to może coś takiego

Kod: Zaznacz cały

#include <iostream>

using namespace std;

class Klasa1
{
    public:
        int Zmienna1;
        
        void podwojWartoscZmiennej1()
        {
            Zmienna1 = Zmienna1 * 2;
        }
};

class Klasa2
{
    public:
        int Zmienna2;
        
        int *WskDoZmienna1;
        
        void zmienWartoscZmienna1(int nowaWartosc)
        {
            *WskDoZmienna1 = nowaWartosc;
        }
};

class GlownaKlasa : public Klasa1, public Klasa2
{
    public:
        GlownaKlasa(int zm1, int zm2) {Zmienna1 = zm1, Zmienna2 = zm2; WskDoZmienna1 = &Zmienna1;}
        
        int dodawanie()
        {
            return *WskDoZmienna1 + Zmienna2;
        }
        
        int mnozenie()
        {
            return *WskDoZmienna1 * Zmienna2;
        }
};

int main()
{
    GlownaKlasa klasa(10,50);
    
    cout<<*klasa.WskDoZmienna1<<" " <<klasa.Zmienna2<<endl;
    cout<<klasa.dodawanie()<<endl;
    cout<<klasa.mnozenie()<<endl;

    cout<<"\nTeraz podwajamy wartosci zmiennej w klasie Klasa1"<<endl;
    klasa.podwojWartoscZmiennej1();
    cout<<*klasa.WskDoZmienna1<<" " <<klasa.Zmienna2<<endl;
    cout<<klasa.dodawanie()<<endl;
    cout<<klasa.mnozenie()<<endl;
    
    cout<<"\nTeraz Zmieniam całkowicie wartość Zmienna1 za pomoca wskaznika z klasy Klasa2"<<endl;
    klasa.zmienWartoscZmienna1(666);
    cout<<*klasa.WskDoZmienna1<<" " <<klasa.Zmienna2<<endl;
    cout<<klasa.dodawanie()<<endl;
    cout<<klasa.mnozenie()<<endl;
    
    return 0;
}
huberthx
Sędziwy Jeż
Sędziwy Jeż
Posty: 71
Rejestracja: 25 lip 2010, 22:26
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: C++ dodanie dwóch zmniennych daje w wyniku dwa zera

Post autor: huberthx »

Dziękuję za zaangażowanie. Twoje kody zaczynają mi co nieco rozjaśniać. Chciałbym się jeszcze tylko zapytać z jakich książek się uczyłeś? Ja uczę się z Kursu C++ Od zera do gier kodera. Zamierzam jeszcze kupić książkę Język C++. Szkoła programowania. Wydanie V. Czy to będzie dobra pozycja? Jeszcze raz wielkie dzięki.
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

Odp: C++ dodanie dwóch zmniennych daje w wyniku dwa zera

Post autor: kabanek »

ja też się uczyłem z tego kursu + google i dużo prób i błędów :-)
z książek przeczytałem jeden rozdział z symfonii i tyle, więc nie powiem Ci ile ta pozycja jest warta.
Awatar użytkownika
noisy
Piegowaty Guziec
Piegowaty Guziec
Posty: 11
Rejestracja: 12 paź 2007, 01:32
Płeć: Mężczyzna
Wersja Ubuntu: 16.04
Środowisko graficzne: Unity
Architektura: x86_64

Odp: C++ dodanie dwóch zmniennych daje w wyniku dwa zera

Post autor: noisy »

tutaj masz recenzję symfonii: http://noisy-coder.blogspot.com/2007/06 ... d-2-2.html

polecam ją serdecznie.
http://eKundelek.pl - najsympatyczniejszy blog o e-czytnikach Kindle
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 13 gości