asocjacja klas wskaźnikami

0

Witam

Pytanie na przykładzie kodu. Jak dobrze tworzyć asocjacje pomiędzy klasami (nie tylko dwoma jak w tym akurat przypadku) ?

Mam Klasę A i jej obiekt z którego większość klas w projekcie będzie korzystała.

// głowny plik main.cpp
int main()
{
         klasa_A obiekt_A; // tworzenie obiektu A
         klasa_A *wsk_A;  // wskaznik na obiekt A
         klasa_B obiekt_B (wsk_A); // przekazanie wskaznika do konstuktora klasy B

         return 0;
}

I mam klasę B która korzysta z dobrodziejstw klasy A

class klasa_B
{
        private :
        klasa_A *wsk;    // wskaznika na klase A 
        int y;

        public  :
        void jakas_metoda()
        {
              y = wsk->x; // wtedy tak wygląda odwołanie się do innej obcej zmiennej
        }

        klasa_B();
        klasa_B(console *wskaznik)
        {
              wsk = wskaznik;  // asocjacja
        }

        ~klasa_B() {}
};

Czy taki kod jest w miarę poprawny ? Czy przy np. 5 klasach zmienia się idea robienia asocjacji ? gdzie można douczyć się tworzenia prawidłowej architektury kodu ?

0

Drobna poprawka:

// głowny plik main.cpp
int main()
{
         klasa_A obiekt_A; // tworzenie obiektu A
//<---
         klasa_A *wsk_A = &obiekt_A;  // wskaznik na obiekt A
//<---
         klasa_B obiekt_B (wsk_A); // przekazanie wskaznika do konstuktora klasy B
 
         return 0;
}

Konstrukcja w miarę poprawna. Problem zaczyna się gdy musisz zrobić coś takiego:

main
-> obiekt_B
-> obiekt_C
-> obiekt_D
-> obiekt_A

... i musisz dodać do obiektu_D także wskaźnik do jakiegoś nowego obiektu z main()...

I zaczynasz kombinować:

Jeśli chodzi jeszcze o samo C++, to możesz wykorzystać:

  • boost::shared_ptr
  • boost::weak_ptr

Zobacz: http://www.codeproject.com/KB/stl/boostsmartptr.aspx

0

tak troche zmieniałem kod i przez to ten błąd. Normalnie mam tak jak w poprawce :)

Czyli rozumiem do prostych programów można mojej metody używać.

Szkoda że na wykładach o np. singletonach czy sprytnych wskaźnikach nic nie ma mowy i pewnie nie tylko, poza tym nie w każdej książce one występują.

Dzięki poczytam i spróbuję w praktyce ogarnąć.

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