[C++] Lista inicjalizacyjna i klasa bazowa
Ostatnio zmodyfikowano 2015-12-31 18:57
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. #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; }
|
|
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 #include <iostream>
using namespace std;
class Baza { public: int liczba; Baza() { liczba = 0; } Baza( int _liczba ) { liczba = _liczba; } };
class Pochodna : public Baza { public: Pochodna( int _dana ) : Baza( _dana ) { } void wypisz() { cout << this->liczba << endl; } }; int main() { Pochodna p( 1 ); p.wypisz(); return 0; }
|
|
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 ?
|
|
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) |
|
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ę ? |
|
1aam2am1 |
» 2015-12-31 18:57:06 Tak class Pochodna { public: Baza b; Pochodna( int _dana ) : b( _dana ) { } void wypisz() { cout << b.liczba << endl; } };
Tylko że wtedy Pochodna nie jest pochodną. |
|
« 1 » |