Dlaczego klasa wyświetla złą wartość

0

Dlaczego po przypisaniu wartości do tablicy klas, przypisało się 0 z klasy bazowej a nie 1? z klasy pochodnej jak zostało przekazane

#include <iostream>
using namespace std;

class Towar {
public:
    int i;
    Towar(int i = 0)
        : i(i){};
};

class Towar_poch : public Towar {
public:
    int i;
    Towar_poch(int i = 1)
        : i(i){};
};
class koszyk {
public:
    Towar object[4];
    koszyk(Towar object1, Towar object2)
    {
        object[0] = object1;
        object[1] = object2;
        cout << object[0].i << endl;
        cout << object[1].i << endl;
    };
};

int main(int argc, char** argv)
{
    Towar object;
    Towar_poch object2;
    koszyk object3(object, object2);

    return 0;
}

tutaj tak samo: (bo prubuje zobaczyć różnicę między przekazywaniem przez adres, a po prostu wprost )

#include <iostream>
using namespace std;

class Towar {
public:
    int i;
    Towar(int i = 4)
        : i(i){};
    virtual void name()
    {
        cout << "f";
    };
};

class Towar_poch : public Towar {
public:
    int i;
    Towar_poch(int i = 1)
        : i(i){};
    void name()
    {
        cout << "f";
    }
};
class koszyk {
public:
    Towar* object[4];
    koszyk(Towar* object1, Towar* object2)
    {
        object[0] = object1;
        object[1] = object2;
        cout << object[0]->i << endl;
        cout << object[1]->i << endl;
    };
};

int main(int argc, char** argv)
{
    Towar object;
    Towar_poch object2;
    koszyk object3(&object, &object2);

    return 0;
}

0
bartek164 napisał(a):

Dlaczego po przypisaniu wartości do tablicy klas, przypisało się 0 z klasy bazowej a nie 1? z klasy pochodnej jak zostało przekazane

Bo w Twoim przypadku Towar::i i Towar_poch::i to dwie różnie zmienne. W konstruktorze klasy pochodnej nie wywołujesz konstruktora klasy bazowej.

bartek164 napisał(a):

tutaj tak samo: (bo prubuje zobaczyć różnicę między przekazywaniem przez adres, a po prostu wprost )

Jak przekazujesz coś przez adres(wskaźnik/referencje) to działasz na oryginale. Jak przekazujesz przez wartość to działasz na kopii, czyli wszelkie zmiany jakich dokonasz nie są uwzględniane w obiekcie z którego kopia jest stworzona.

0

tutaj jest temat, zle mi sie wpisało
Czemu się nie moge odwołać do obiektu j klasy pochodnej?, przecież przkazałem adres tej klasy
class towar has no member named ;
wiem, ale skoro towar_poch został przkazany do wskażnika no to .....

#include <iostream>
using namespace std;

class Towar {
public:
    int i;
    Towar(int i = 4)
        : i(i){};
    virtual void name()
    {
        cout << "f";
    };
};

class Towar_poch : public Towar {
public:
    int j;
    Towar_poch(int i = 1)
        : j(i){};
 
};
class koszyk {
public:
    Towar* object[4];
    koszyk(Towar* object1, Towar* object2)
    {
        object[0] = object1;
        object[1] = object2;
        cout << object[0]->i << endl;
        cout << object[1]->j << endl;
    };
};

int main(int argc, char** argv)
{
    Towar object;
    Towar_poch object2;
    koszyk object3(&object, &object2);

    return 0;
}

i czemuż to nie działa?:

#include <iostream>
using namespace std;

class Towar {
protected:
    string nazwa;

public:
    virtual void sprzedaj();

    Towar(string nazwa)
        : nazwa(nazwa)
    {
    }
};

void Towar::sprzedaj()
{
    cout << "Sprzedarz " << nazwa << endl;
}

class Towar_z_Gwarancja : public Towar {
protected:
    string podbicie_gwarancji;

public:
    void sprzedaj();
    Towar_z_Gwarancja(string nazwa, string podbicie_gwarancji)
        : Towar(nazwa)
        , podbicie_gwarancji(podbicie_gwarancji){};
};

void Towar_z_Gwarancja::sprzedaj()
{
    Towar::sprzedaj();
    cout << ".Podbicie gwarancji\n";
}

class Koszyk {
public:
    int i;
    Towar koszyk[10];

    Koszyk(int i = 0)
        : i(i){};

    void Dodaj_Towar_do_Koszyka(Towar towar)
    {
        if (i <= 9) {
            koszyk[i] = towar;
            ++i;
        }
    }
};

int main(int argc, char** argv)
{

    Towar towarek1("jablko");
    Towar_z_Gwarancja towarek2("sok", "3.11.1997");
    Koszyk koszyk1;
    koszyk1.Dodaj_Towar_do_Koszyka(towarek1);
    koszyk1.Dodaj_Towar_do_Koszyka(towarek2);

    return 0;
}


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