Tworzenie obiektow konstruktorem.

0
class Marchewka
{
public:
     __fastcall Marchewka(); 
     __fastcall ~Marchewka(); 
 
private:
//miliardy właściwości
 
};
 

Na wstępie zaznaczę, że obiektowości znam tylko podstawy podstaw.
Interesuje mnie tworzenie wielu obiektów, a następnie zniszczenie ich po spełnieniu jakiegoś warunku. Normalnie z zakładki Additional wziąłbym interesującą mnie opcję Image i wklepywał na formę, ale takie coś odpada.

Obiekty mają być tworzone w jednakowym odstępie czasowym, więc wpadłem na to by wrzucić konstruktor w Timer i to już byłby jakiś krok do przodu, ale dalej mam kilka problemów.

  1. Jak dodać do obiektu obrazek? Odpowiada za to właściwość Picture i muszę podać ścieżkę do niego, ale jak to ująć w kod?
  2. Mamy obiekt (innej) klasy Ziemniak
Ziemniak obiektz;

który ma właściwości które z upływem czasu się zmieniają
i teraz tworzymy nasz

Marchewka obiekt1;

i chcemy by część jego właściwości zmieniała się identycznie jak w obiekcie obiektz.
Jak najprościej to zrobić i czego się ewentualnie douczyć?

0

Hej!
Słuchaj, napisałem na temat Programowania Obiektowego od 0 artykuł i na przykładzie programu w C++ właśnie pokazuję podstawy (wcześniej omówione). Tak kompletnie od 0, więc może on Ci jakoś pomoże. Jeśli dalej będziesz miał problem napisz do mnie na maila to może razem coś wymyślimy ; - )
http://www.marekczuma.pl/2016/07/12/programowanie-obiektowe-czyli-jak-programowac-aby-skutecznie-tworzyc-realny-swiat/

0
Czarny Kot napisał(a):
class Marchewka
{
public:
     __fastcall Marchewka(); 
     __fastcall ~Marchewka(); 
 
private:
//miliardy właściwości
 
};
 

Po tym kodzie nie widzę tutaj, żeby Marchewka i Ziemniak miały wspólnego potomka. A chyba powinny, nie?

  1. Jak dodać do obiektu obrazek? Odpowiada za to właściwość Picture i muszę podać ścieżkę do niego, ale jak to ująć w kod?

Serio?
obj.Picture.LoadFromFile("plik.jpg") ?

  1. Mamy obiekt (innej) klasy Ziemniak
Ziemniak obiektz;

który ma właściwości które z upływem czasu się zmieniają
i teraz tworzymy nasz

Marchewka obiekt1;

i chcemy by część jego właściwości zmieniała się identycznie jak w obiekcie obiektz.
Jak najprościej to zrobić i czego się ewentualnie douczyć?

Tutaj możliwości widzę kilka.
Najlepsza chyba jest taka, żeby posłużyć się reaktorami. Tzn. Tworzysz sobie jakiś obiekt, do którego dodajesz listę zdarzeń, które się mają odpalić w pewnym momencie, np.:
(pseudokod)

 
reactor.RegisterEvent(marchewka.OnValueChange);
reactor.RegisterEvent(ziemniak.OnValueChange);

Jak już wspomniałem, obiekt reactor ma jakąś tam tablicę, czy listę tych zdarzeń. Więc, gdy zdarzenia mają się odpalić, wtedy:
(pseudokod)

reactor.FireEvents();

A FireEvents może wyglądać podobnie do tego:

 
for(size_t i = 0; i < m_events.size(); ++i)
{
  m_events[i](); // <-- wywołanie wcześniej zarejestrowanego eventu
}

Następnie w OnValueChanged marchewki i ziemniaka zmieniasz sobie co tam chcesz. OnValueChanged może też mieć jakieś parametry, w których będą zmiany, np:

Marchewka::OnValueChanged(const ObjectParams & params)
{
  m_params = params;
}

To jest chyba najlepsze rozwiązanie.
Inną możliwością, ale brzydką i niedobrą jest użycie wskaźników. Nie polecam Ci tego, bo dość szybko może się zrobić burdel i dość szybko może Ci się aplikacja wysypywać. Więc nawet nie będę się silił na pseudokod :)

0

Tej metody poważnie nie znałem, za krótko w tym siedzę chyba, no ale dzięki.

Chętnie bym spróbował tych reaktorów ale na razie stoję w miejscu. Próbowałem z tą wspomnianą wcześniej marchewką np. to

class Marchewka : public TImage
{
//jakieś ciało
};
  

Ale wywala mi syntax errory, frustracja rośnie, bo to by oznaczało że coś pominąłem przy ogarnianiu tego całego dziedziczenia.

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