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

dziedziczenie = prosba o sprawdzenie kawalka tworzenia kodu

Ostatnio zmodyfikowano 2010-03-28 23:35
Autor Wiadomość
szyx_yankez
» 2010-03-28 19:57:58
by malan:
<< delete >>
by szyx_yankez: Jakiś bug na ddt.pl, albo z moja operą coś nie tak(źle znaki koduje)?
Co to miało być?
P-15556
Elaine
» 2010-03-28 22:09:55
Aby użyć listy inicjalizacyjnej nie trzeba definiować konstruktora w ciele klasy:
C/C++
struct foo
{
    foo();
    int mySth;
};

foo::foo()
    : mySth( 11 )
{
}
P-15565
dmx81
Temat założony przez niniejszego użytkownika
» 2010-03-28 22:37:43
ok rozumiem.
1. a jesli klasa jest dziedziczona, to trzeba jeszcze w sposob jawny uzyc konstruktora klasy bazowej, aby ustawic te zmienne?

2. a jesli z definicji kontruktora klasy bazowej argumenty byly typu int, a w klasie dziedziczonej argumetnami beda tablice &int lub *int, to wtedy jak to zrobic poza cialem konstruktora czyli w liscie inicjalizacyjnej?

int X,Y;
bool ok;

klasa_bazowa::klasa_bazowa(int x, int y):X(x),y(Y){ok=false;}
klasa_pochodna::klasa_pochodna(int& x,&inty):.....?????

a.bo jesli dam zamiast kropek X(tabx),Y(taby) to napisze, ze nie ma takich zmiennych w klasie dziedziczonej - pochodnej

b.zamiast kropek dam klasa_bazowa X(tabx),Y(tabY) to kompilator chce nawiasu, to daje
klasa_bazowa (X(tabx),Y(tabY)) to kompilator mowi, ze  X i Y nie moga byc funkcjami, to daje klasa_bazowa (X,Y) - to program odpala, ale nie dziala moje zalozenie, tzn x i y to pozycje obiektow na ekranie, a nie rysuje sie nic, bo tak naprawde nie wiem sam, jakie x i y przydzieli w tym przypadku program dla obiektu.

c. program dziala poprawnie tylko w przypadku, jesli ustawie x i y w ciele konstruktora, ze dziedziczone X=tabx, Y=taby - i dziala ok, tu kompilator widzi i X i Y, bo jak dam to w liscie inicjalizacyjnej, to mam ze X i Y nie zadklerowano tu - wiec pytam, jak w takim przypadku uzyc listy inicjalizacyjnej
P-15568
Elaine
» 2010-03-28 22:49:25
1. Tak.
2. Referencję można traktować jako wartość.
C/C++
klasa_pochodna::klasa_pochodna( int & x, int & y )
    : klasa_bazowa( x, y )
{
    // ...
}
P-15570
dmx81
Temat założony przez niniejszego użytkownika
» 2010-03-28 23:35:30
sprawdzilem ten sposob i dziala :) a czy moge to tak odczytac, ze:
tworzenie obiektu klasy pochodnej - zmienne odziedziczone z klasy bazowej:
bedzie inicjowane innym typem argumentow, niz to sugeruje konstruktor klasy bazowej, wiec w konstruktorze klasy pochodnej musze wypisac te typy argumentow, lecz aby je "ustawic" w liscie inicjalizacyjnej, musze w tym celu uzyc konstruktora klasy bazowej (i rowniez wypisac tu argumenty, takie jak w kontruktorze klasy pochodnej, lecz juz bez typow, a takze bez np X(x) - samo X)

jesli tak, to wystarczy teraz tylko to utrwalic przez troszke cwiczen:)

PS> nie wiem czy to jest gdzies w nowym kursie, ale na necie malo takich rzeczy znalazlem, dlatego nie wiedzialem jak to ustawic:) bo jest zawsze przyklad jakis i juz, a wiadomo, ze zawsze wystepuja te same przypadki co w przykladzie (choc z drugiej strony nie ma sposobu aby w przykladach umiescic wszystkie mozliwe przypadki - chociaz takie tworzenie klas chyba jest dosc powszechne?)
P-15577
1 « 2 »
Poprzednia strona Strona 2 z 2