Bartaz Temat założony przez niniejszego użytkownika |
c++ struktury i klasy. » 2010-02-14 13:28:52 Witam mam problem dlaczego nie działa mi takie cos jak zrobic zeby to zadzialalo? struct panstwo { int cena = 370; }; panstwo hiszpania; lub class panstwo { public: int cena = 370; }; panstwo grecja; |
|
WunM |
» 2010-02-14 13:44:39 Dowiedz się co to są konstruktory i destruktory to pogadamy. |
|
Bartaz Temat założony przez niniejszego użytkownika |
... » 2010-02-14 13:46:08 ok |
|
wojos |
» 2010-02-14 14:50:33 Nie możesz przypisywać wartości od razu w klasie, tym musi zająć się już obiekt (nie wiem jak ze strukturami bo praktycznie nigdy z nich nie korzystałem). Jeżeli chcesz, by zmienna w jakiejś klasie zawsze miała tą samą wartość przy tworzeniu obietu - przypisujesz jej żądaną wartość w konstruktorze: class PANSTWO { public: PANSTWO() { itsCost = 370; } PANSTWO( int Cost ) { itsCost = Cost; } ~PANSTWO() { }; int GetCost() { return itsCost; } void SetCost( int newCost ) { itsCost = newCost; } private: int itsCost; };
To jest już trochę bardziej złożona klasa niż ta, którą pokazałeś Ty, jest w niej przestrzeń prywatna - dostęp do niej zapewniają akcesory GetCost() i SetCost(int newCost). Jeżeli chciałbyś zrobić tą klasę tak jak wcześniej (choć nie jest to rozwiązanie eleganckie i przy większych projektach mogłoby stać się niebezpieczne), to żeby przypisać zmiennej cena wartość domyślną i tak musisz zaimplementować konstruktor domyślny: class PANSTWO { public: PANSTWO() { cena = 500; } int cena; };
W tej klasie przy tworzeniu obiektu jego zmienna "cena" zawsze będzie ustawiana na wartość 500. |
|
Elaine |
» 2010-02-14 16:34:06 Za przypisania w konstruktorze powinni wieszać za jaja (zwłaszcza, jeśli przypisujemy do czegoś, co nie jest typu prostego)... Listy inicjalizacyjne do czegoś zostały stworzone. |
|
dmx81 |
» 2010-02-14 23:23:42 class C_poziom1 { public: int i_x, i_y, i_s, i_w; bool b_disp; BITMAP * obrazek; C_poziom1(); C_poziom1( int x, int y, int s, int w ); }; C_poziom1::C_poziom1( int x, int y, int s, int w ) { i_x = x; i_y = y; i_s = s; i_w = w; } masz tu przyklad z mojego kawalka kodu, jak widzisz, najpierw okreslamy, jakie zmienne beda przechowywane w obiektach danej klasy, pozniej tworzymy konstruktor, a pozniej wystarczy cos takiego: C_poziom1 obiekt( 4, 11, 33, 55 ); mam nadzieje, ze rozumiesz o co chodzi, ewenualnie mozesz nadac jakas wartosc w ten sposob - bool nadaje poza konstruktorem C_poziom1 strzala1( 800, 75, 15, 5 ); strzala1.b_disp = false; strzala1.obrazek = load_bmp( "strzala.bmp", default_palette ); nie wiem, czy moj sposob jest 100% poprawny, poniewaz rownierz dopiero sie ucze, ale wlasnie w ten sposob wszystko dziala mi poprawnie :) i mam co chce pod kontrola |
|
WunM |
» 2010-02-15 11:15:28 class MyClass { int x, y; public: int z; MyClass( int x, int y, int z ) : x( x ) , y( y ) , z( z ) { } };
|
|
wojos |
» 2010-02-15 18:12:23 Ok to może jeszcze wspomnę o listach inicjalizacyjnych. Możesz przypisać zmiennym wartości jeszcze przed wywołaniem właściwego ciała konstruktora i wyglądałoby to tak: class COSTAM { public: COSTAM(); COSTAM( int a, int b ); ~COSTAM(); private: int x; int y; };
COSTAM::COSTAM() : x( 10 ) , y( 20 ) { }
COSTAM::COSTAM( int a, int b ) : x( a ) , y( b ) { }
COSTAM::~COSTAM() { }
|
|
« 1 » |