Obiekt klasy w klasie
Ostatnio zmodyfikowano 2012-07-18 08:28
diego997 Temat założony przez niniejszego użytkownika |
Obiekt klasy w klasie » 2012-07-17 20:39:10 Mam dwie klasy Klasa Jeden i Klasa Dwa są to klasy niezależne, lecz obiekt klasy Dwa znajduje się w klasie Jeden. Co zrobić aby móc za pomocą obiektu klasy Jeden zmieniać składowe w klasie Dwa? Jedyny sposób jaki mi przychodzi do głowy to dobulowanie metod czyli np. chce zmienić poz_x, poz_y, wysokosc,szerokosc w klasie dwa to bym napsiał taką definicje; class Jeden { public: Dwa Obiekt; void zmien( int x, int y, int wysokosc, int szerokosc ); };
class Dwa { public: int poz_x; int poz_y; int wysokosc; int szerokosc; void zmien( int x, int y, int wysokosc, int szerokosc ); };
Jeden::zmien( int x, int y, int wysokosc, int szerokosc ) { Obiekt.zmien( x, y, wysokosc, szerokosc ); }
Dwa::zmien( int x, int y, int wysokosc, int szerokosc ) { poz_x = x; poz_y = y; wysokosc = wysokosc; szerokosc = szerokosc; }
Moim zdaniem tragiczne rozwiązanie ale inne mi do głowy nie przychodzi. Możecie jakoś poradzić mam nadzieję że rozumiecie problem. |
|
szyx_yankez |
» 2012-07-17 21:02:50 #include <iostream>
class Dwa;
class Jeden { public: Dwa * Obiekt; void zmien( int x, int y, int wysokosc, int szerokosc ); };
class Dwa { public: int poz_x; int poz_y; int wysokosc; int szerokosc; };
void Jeden::zmien( int x, int y, int wysokosc, int szerokosc ) { ( * Obiekt ) = { x, y, wysokosc, szerokosc }; }
int main() { Jeden A; A.zmien( 1, 2, 3, 4 ); std::cout << A.Obiekt->poz_x; }
|
|
diego997 Temat założony przez niniejszego użytkownika |
» 2012-07-17 21:33:57 Kompiluje się u ciebie ? Czy nie sprawdzaleś ?
Bo u mnie nie, błąd to problem z nawiasami. W sumie pierwszy raz widzę taki zapis nie mam pojęcia jakby miał to kompilator zinterpretowac :D
BTW. dzięki za odpowiedz właśnie czegoś w tym stylu potrzebuje |
|
szyx_yankez |
» 2012-07-17 21:49:19 Kompiluje się i nawet działa - MinGW 4.5.2. W sumie kod częściowo oparty jest na standardzie cpp0x, spróbuj dodać w ustawieniach kompilatora -std=c++0x lub -gnu=c++0x .
Jeżeli to nie pomoże zrób tak:
void Jeden::zmien( int x, int y, int wysokosc, int szerokosc ) { Obiekt->poz_x = x; Obiekt->poz_y = y; Obiekt->wysokosc = wysokosc; Obiekt->szerokosc = szerokosc; }
|
|
diego997 Temat założony przez niniejszego użytkownika |
» 2012-07-17 21:52:00 Ok a mógłbyś mi powiedzieć dlaczego to działa skąd kompulator wie którą zmienną do której przypisać ? Chodzi mi o ten wcześneijszy zapis Ok a mógłbyś mi powiedzieć dlaczego to działa skąd kompulator wie którą zmienną do której przypisać ? Chodzi mi o ten wcześneijszy zapis I czy takie coś by zadziałało class Dwa { public: int a; int b; bool c; int d; }
class Jeden { public: Dwa * Obj; void set( int x1, int x2, int x3 ); };
void Jeden::set( int x1, int x2, int x3 ) { * Obj = { x1, x2, x3 } }
|
|
szyx_yankez |
» 2012-07-17 22:22:59 Ok a mógłbyś mi powiedzieć dlaczego to działa skąd kompulator wie którą zmienną do której przypisać ? |
Kolejność deklaracji zmiennych w klasie.
I czy takie coś by zadziałało |
Teoretycznie tak, w praktyce zadziała inaczej niż byś chciał. Wartość logiczną zmiennej 'x3' przypiszę zmiennej 'c' a nie 'd'.
|
|
kubawal |
» 2012-07-18 08:28:27 można też w Cpp0x tak: * Obj = { x1, x2, d = x3 }
|
|
« 1 » |