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

Obiekt klasy w klasie

Ostatnio zmodyfikowano 2012-07-18 08:28
Autor Wiadomość
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;

C/C++
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.
P-60412
szyx_yankez
» 2012-07-17 21:02:50
C/C++
#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;
}
P-60416
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
P-60419
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:
C/C++
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;
}
P-60420
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

C/C++
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 }
}
P-60422
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'.


P-60424
kubawal
» 2012-07-18 08:28:27
można też w Cpp0x tak:


C/C++
* Obj = { x1, x2, d = x3 }
P-60429
« 1 »
  Strona 1 z 1