Przekazywanie wskazników w konstruktorze

0

Witam, na jutro musze to zrobic niestety nie wiem jak sie do tego zabrac. Mam przepudowac to co nizej, tak aby user byl tworzony w c_USER w konstruktorze i przekazywany do obiektu c_ORDER za pomoca wskaznika. Nie umiem tego dokladnie przekazac nawet :(

Tak tworze obiekty

c_ORDER* order = new c_ORDER();
c_USER* user1 = new c_USER();

Tak wygladaja pliki naglowkowe:
user.h

#pragma once

class c_USER 
{
	private:
	__int16 user;

	public:
	c_USER();
	~c_USER();
	void setUser(__int16 argUser);
	__int16 getUser();
};

i user.cpp

#pragma once
#include "stdafx.h"

c_USER::c_USER() {};
c_USER::~c_USER() {};

void c_USER::setUser(__int16 argUser)
{ user = argUser; }

__int16 c_USER::getUser()
{ return user; }

order.h

#pragma once

class c_ORDER
{
	public:
	c_ORDER();
	~c_ORDER();
};

order.cpp

#pragma once
#include "stdafx.h"
#include "order.h"

c_ORDER::c_ORDER() {}
c_ORDER::~c_ORDER() {}

Potrzebuje tego na jutro, nie dam rady powtorzyc wszystkiego o wskaznikach samemu wiec prosze o pomoc bardziej doswiadczonych :/ Blagam...

0

wykladowca dal mi takie cos jako przyklad (z ksiazki kaczmarskiego)

// klasa serca
class CHeart { /* ... */ };
// bazowa klasa zwierząt
class CAnimal
{
// (pomijamy nieistotne, pozostałe składowe)
protected:
CHeart* m_pSerce;
public:
// konstruktor i destruktor
CAnimal() { m_pSerce = new CHeart; }
~CAnimal() { delete m_pSerce; }
}

No i tlumaczyl ze to ma byc jakos przekazywane w konstruktorze czy cos, naprawde jestem w potrzebie :O Mam nadzieje ze wy wiecie wiecej ode mnie

0

@do newbie

karczi napisał(a)

tak aby user byl tworzony w c_USER

wcale, że nie bo to jest bez sensu, pomyśl troche, obiekt ma tworzyć samego siebie w konstruktorze? to się skończy nieskończonym wywoływaniem konstuktora => przepełnienie stosu => wysypanie się programu

masz zrobić tak, aby obiekt c_USER ma być tworzony w konstruktorze c_ORDER jak już, bo c_ORDER ma zawierać w sobie odnośnik(wskaźnik) do c_USERa

czego nie rozumiesz?

0

No pewnie masz racje ;O

No nie wiem jak sie za to zabrac, nie rozumiem wskaznikow bo ich jeszcze nie przerobilem samemu w domu i jestem w ich temacie zielony, przejrzalem fragmenty kodow gdzies po sieci ale duzo mi to nie dalo ;O Wiem mniej wiecej co mam zrobic ale nie wiem jak sie za to zabrac - w ogóle nie wiem jak to zrobic. Wskazniki to mi sa znane tylko z tego ze uzywam ich przy tworzeniu obiektu a potem sie odwoluje wskaznik->metoda

;/

0
karczi napisał(a)

Wiem mniej wiecej co mam zrobic ale nie wiem jak sie za to zabrac
To wytłumacz jakoś po ludzko, za co są odpowiedzialne te klasy i co je łączy, co ma się dziać w tym konstruktorze. Po twoim pierwszym poście nie idzie się domyślić.

0

W dotychczasowym programie nie mialem klasy c_USER i plikow user.h i user.cpp, a metody getUser i setUser ktore sie tam znajduja znajdowaly sie w klasie c_ORDER.

Wykladowca stwierdzil ze chcialby widziec wiecej powiazan miedzy klasami i obiektami, i nakazal rozdzielenie na dwie klasy. Wytlumaczyl to jakos tak, aby jedna odpowiadala za tego usera i przekazywala jako wskaznic nazwe tego usera do klasy c_ORDER. Lepiej teraz? Wole nie dopowwiadac i nie rekonstruowac tego co ejszcze powiedzial bo wyjdzie jeszcze gorzej ;)

i jako wzor ktory moze mi pomoc wskazal mi ten kod ktory zamiescilem w 2gim poscie.

Moge powiedziec tak: Chce mieć klase c_ORDER przy której tworzeniu, stworzy Ci sie automatycznie obiekt klasy c_USERi dane tego usera beda widoczne w klasie c_ORDER? - lepiej? tylko nie wiem jak to zrealizowac

0

Chodzi o relację krzyżową, tj:

class c_ORDER
{
private:
        c_USER *user;
public:
        c_ORDER()
        {
                user = new c_USER(this); //tworzymy user'a i zapisujemy jego wskaźnik
        }
        ~c_ORDER()
        {
                delete user; //przy niszczeniu order'a niszczymy też powiązanego z nim user'a
        }
};

class c_USER 
{
private:
        c_ORDER *order;
public:
        c_USER(c_ORDER *order)
        {
                this->order = order; //zapisujemy wskaźnik do order'a, który stworzył user'a
        }
};
0
karczi napisał(a)

Wykladowca stwierdzil ze chcialby widziec wiecej powiazan miedzy klasami i obiektami
Zawsze wydawało mi się, że powinno się dążyć do minimalizacji powiązań między klasami.

Co do przykładu, z książki jest zrozumiały (bo nazewnictwo jest jasne i precyzyjne, więc i cel klas jest zrozumiały).
W twoim przypadku nazewnictwo niewiele mówi, jaka ma być relacja między klasami, ergo nie wiadomo jak przenieść rozwiązanie z przykładu na twój program.

@adf88: zachodzę w głowę jak doszedłeś. Widzę założenie, że c_ORDER tworzy (zawiera) obiekt c_USER, a z tym wskaźnikiem na "parent'a" to raczwej mu namieszasz w głowie.
Na dodatek mnie klapka otwiera się w drugą stronę, że c_USER tworzy c_ORDER, no ale tu właśnie pytanie co to właściwie ma robić?

0
MarekR22 napisał(a)
karczi napisał(a)

Wykladowca stwierdzil ze chcialby widziec wiecej powiazan miedzy klasami i obiektami
Zawsze wydawało mi się, że powinno się dążyć do minimalizacji powiązań między klasami.

Wiesz chodzi o to ze chca nas nauczyc wiec nie daza do optymalizacji kodu na tym etapie :D

@adf88, dzieki aczkolwiek wydaje mi sie e to nie do konca to o co mi chodzilo - jest to moja wina bo nie potrafie nazwac mojego problemu ani wyjasnic jak ma byc rozwiazany. Napisalem do wykladowcy, mam nadzieje ze szybko odpisze i bede mogl udzilic dodatkowych informacji ktore beda przydatne...

Dziek iza cierpliowsc i dotychczasowa pomoc!

0

Albo sproboje jeszcze w ten sposb, tutaj ( http://www.box.net/shared/mqcgijd0rg ) jest link do mojego programu, tak bedzie chyba najszybciej a nie bede wklejal poszarpany kod tutaj.

Chodzi o to zeby wszystko co zwiazane z uzytkownikiem wydzielic z c_ORDER do nowej klasy, a nastepnie powiazac ja za pomoca wskaznika wlasnie na nowo z klasa c_ORDER. Chodzi o to zeby byla mniedzy nimi jakas zaleznosc a nie dwie klasy nie powiazane ze soba.

Wiem, jestem beznadziejny :O

1 użytkowników online, w tym zalogowanych: 0, gości: 1