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ć? |
|
Elaine |
» 2010-03-28 22:09:55 Aby użyć listy inicjalizacyjnej nie trzeba definiować konstruktora w ciele klasy: struct foo { foo(); int mySth; };
foo::foo() : mySth( 11 ) { } |
|
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 |
|
Elaine |
» 2010-03-28 22:49:25 1. Tak. 2. Referencję można traktować jako wartość. klasa_pochodna::klasa_pochodna( int & x, int & y ) : klasa_bazowa( x, y ) { } |
|
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?) |
|
1 « 2 » |