Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Lista inicjalizacyjna i klasa bazowa

Ostatnio zmodyfikowano 2015-12-31 18:57
Autor Wiadomość
ast44
Temat założony przez niniejszego użytkownika
[C++] Lista inicjalizacyjna i klasa bazowa
» 2015-12-31 15:45:06
Zastanawiam się dlaczego nie zadział konstruktor specjalizowany w klasie bazowej po wywołaniu na liście inicjalizacyjnej w klasie pochodnej.Tzn czemu wypisało mi 0 zamiast 1.

C/C++
#include <iostream>

using namespace std;

class Baza
{
public:
    int liczba;
   
    Baza()
    {
        liczba = 0;
    }
   
    Baza( int _liczba )
    {
        liczba = _liczba;
    }
};

class Pochodna
    : public Baza
{
public:
    Baza b;
   
   
    Pochodna( int _dana )
        : Baza( _dana )
    { }
   
    void wypisz()
    {
        cout << b.liczba << endl;
    }
};
int main()
{
    Pochodna p( 1 );
    p.wypisz();
   
    return 0;
}
P-142639
1aam2am1
» 2015-12-31 15:51:11
Bo nie odnosisz się do liczby w Bazie znajdującej się elemnetem Pochodnej tylko do jest składnika
C/C++
#include <iostream>

using namespace std;

class Baza
{
public:
    int liczba;
   
    Baza()
    {
        liczba = 0;
    }
   
    Baza( int _liczba )
    {
        liczba = _liczba;
    }
};

class Pochodna
    : public Baza
{
public:
    //Baza b; //po co to
   
   
    Pochodna( int _dana )
        : Baza( _dana )
    { }
   
    void wypisz()
    {
        cout << this->liczba << endl; //i tu był błąd
    }
};
int main()
{
    Pochodna p( 1 );
    p.wypisz();
   
    return 0;
}
P-142640
ast44
Temat założony przez niniejszego użytkownika
» 2015-12-31 16:28:33
Nie za bardzo widzę jak to rozumieć.Po prostu na liście inicjalizacyjnej wywołuję konstruktor i tworzę nowy obiekt klasy bazowej i dla niego jest wskaźnik this, natomiast jak stworzę obiekt klasy bazowej poza listą inicjalizacyjną to dla niego zawsze będzie konstruktor domyślny ?

P-142642
1aam2am1
» 2015-12-31 17:35:08
Baza = |jakieś dane bazy|
Pochodna = |(jakieś dane bazy)(jakieś dane pochodnej)|

Tak to powinno wyglądać.

Ty stworzyłeś:

Baza = |jakieś dane bazy|
Pochodna = |(jakieś dane bazy)(jakieś dane bazy + jakieś dane pochodnej)|

Wywołałeś konstruktor dla pierwszego obiektu bazy (wbudowanego przez dziedziczenie) a wypisywałeś obiekt bazy (element)
P-142644
ast44
Temat założony przez niniejszego użytkownika
» 2015-12-31 18:15:38
Ok, a jakbym chciał wywołać konstruktor specjalizowany dla b w klasie pochodnej.Da się ?
P-142646
1aam2am1
» 2015-12-31 18:57:06
Tak
C/C++
class Pochodna
{
public:
    Baza b;
   
   
    Pochodna( int _dana )
        : b( _dana )
    { }
   
    void wypisz()
    {
        cout << b.liczba << endl;
    }
};
Tylko że wtedy Pochodna nie jest pochodną.
P-142647
« 1 »
  Strona 1 z 1