[C++][SLOVED] Problem wymiany informacji pomiędzy klasami


(Tabcin) #1

Witam.

Piszę program bankomat - mam w nim dwie klasy - bankomat oraz interfejs (w plikach system.h, interface.h). Obiekt klasy interfejs tworzony jest wewnątrz klasy bankomat. Chciałbym móc swobodnie z poziomu interfejsu zmieniać pola bankomatu. Mogę bez problemu modyfikować pola klasy interfejs z poziomu bankomatu, jednak nie mam bladego pojęcia jak się za to zabrać w odwrotną stronę. Owszem, da się wszystkie pola interfejsu dać do sekcji public i odczytywać je z poziomu bankomatu, ale to rozwiązanie raczej nieeleganckie. Próbowałem zrobić dziedziczenie, jednak otrzymuję błąd przepełnienia bufora w momencie tworzenia obiektu interface, mimo iż sam projekt buduje się bezbłędnie.

Mój kompilator to Visual Studio 2008 SP1, system Windows 7 professional.

main.cpp tylko inicjalizuje system, Podejrzewam że może być coś nie tak z moim sposobem dołączania plikow nagłówkowych.

edit // Wywaliłem kod, gdyż niewiele wnosił do tematu. Dane z interfejsu odczytuję za pomocą wskaźnika, pola interfejsu są w sekcji private (interfejs zaprzyjaźniłem z bankomatem).


(Mk Md) #2

Nie wiem czy o to chodzi, ale sprobuj dać deklaracje przyjaźni w klasie bankomat. Wtedy klasa interfejs będzie miała dostęp do prywatnych składników klasy bankomat. A przy dziedziczeniu jeśli chcesz mieć dostęp do składników klasy nadrzędnej zastosuj protected zamiast private.


(Tabcin) #3

Co do dziedziczenia nie mam bladego pojęcia dlaczego przy uruchomieniu programu otrzymuję natychmiast (w momencie tworzenia obiektu interfejs) błąd przepełnienia bufora. :? . Problem obszedłem tak jak napisałem w pierwszym poście - wszystkie pola i metody interfejsu są publiczne (notabene struktura z tego wyszła). Deklaracja przyjaźni ? Dokładnie o to chodziło - myślałem że można dodawać tylko pojedyncze metody, nie wiedziałem że można dodać od tak całą klasę. Dzięki za wskazówkę.


([alex]) #4

Zmień klauzule private w bakomat na protected i masz pełny dostęp.


(Tabcin) #5

Nie wiem czemu, ale dziedziczenie wywoływało u mnie błąd przepełnienia bufora (nawet jak zmieniłem etykietę na ptorected), także to nie wchodziło w rachubę. Poza tym dziedziczenie jest mi kompletnie zbędne. Wcześniej prawie wszystkie zadania próbowałem realizować wewnątrz bankomatu, teraz przynajmniej nauczyłem się prawidłowo oddzielać od siebie algorytm od interfejsu :slight_smile: