[C++]Przesyłanie danych pomiędzy dwoma klasami .

0

Witam koledzy programiści :)

Mam do Was pytanie.Mam taką o to klasę -dopiero skończyłem czytać/przerabiać przykłady z obiektowego podejścia- i chciał bym ,aby ta klasa skomunikowała się z drugą klasą.

class Dane_osobiste
{
     friend class Dane_uzytkownika;
     string imie;
     string nazwisko;
};

Czy da radę to zrobić ,ale bez tworzenia referencji w deklaracji funkcji i bez przerostu formy nad treścią ?:P

Czy jedyna możliwość, aby przekazać wartości z atrybutów prywatnych w klasie Dane_użytkownika, do atrybutów prywatnych klasy Dane_publiczne wiedzie przez stworzenie nowej funkcji i w jej deklaracji utworzyć referencję do klasy .Jak poniżej:

class Dane_publiczne
{
   string imie;
   string nazwisko;
    public:
    void jakas_funkcja(Dane_uzytkownika & nazwa_do_referencji)
        {
               //tutaj przypisanie do atrybutów publicznych 
         }  

}

Chce zrobić prosty interface wyświetlający dane użytkownika z kilku różnych klas :)

0

wybacz to absurd.
De facto powinna być jedna struktura z tymi danymi i aplikacja jak chce coś wyciągnąć wyciąga dane z vectora

struct DaneOsobowe {
//dane
}

std::vector<DaneOsobowe> dane;

Ogólnie jak pijesz do rozwiązań typu: " Jak odpalić jakąś funkcję z innej klasy, nie mając jej jako pola(w sensie klasę), czy argumentu". Poczytaj o callbackach. Albo connect z qt/boost czy innych systemach eventów.

0

Faktycznie może to być absurdalne . Nie spojrzałem na to z tej strony .

Mógł byś powiedzieć w jakimś nie formalnym języku co miałeś na myśli mówiąc :)

aplikacja jak chce coś wyciągnąć wyciąga dane z vectora

1

Problem polega na tym, że @pain368 sam nie wie czego chce, a co dopiero mówić o wyjaśnieniu nam co chce osiągnąć.
Ogólnie to pytanie ma klasyczny problem XY, czyli jest to źle zadane pytanie. @pain368 pyta jak poprawić jeg pomysł na rozwiązanie, zamiast wyjaśnić jaki problem ma rozwiązywać jego program i dopiero wtedy opisać jak podszedł do tego zagadnienia.

0

zabrakło przecinka powinno być
"aplikacja jak chce coś wyciągnąć, wyciąga dane z vectora"
defacto podałem ci przykład w c++ który ilustruje częściowo o co chodzi.
std::vector
możesz sobie też poczytać o
pełnomocnik
ale ty w sumie i tak potrzebujesz trywialnego rozwiązania a nie wzorzec projektowy.

0

Jak to nie wiem :D idę w myśl zasady" od ogółu do szczegółu " to raz , dwa faktycznie nie umiem tego opisywać takim ładnym formalnym językiem jak Wy ,bardziej doświadczenie użytkownicy/programiści , trzy nie jestem na forum od 2 dni, tylko troszkę dłużej i wydaję mi się ,że w miarę dobrze opisałem problem biorąc pod uwagę fakt ,że ktoś mi już odpowiedział . Dodatkowo na samym końcu napisałem co chce zrobić, a @MarekR22 zarzucasz mi ,że nie wiem co chce zrobić ...może nie czytasz dokładnie?

Chce zrobić interfejs z ogólnymi informacjami o zalogowanym użytkowniku ponieważ robię aplikacje pseudo bankową w konsoli , dane ogólne podzieliłem na 3 abstrakcyjne sekcje:
1.dane_osobiste ,
2.saldo/wypłaty/wpłatystatus_transakcji
3. kilka innych rzeczy .

które ma wyświetlać jedna klasa

Założyłem że dane takie jak imię i nazwisko są danymi prywatnymi ,więc dobrze by było żeby były dostępne tylko z poziomu klasy ,a wyświetlane przez jej kopie w jakiejś funkcji ,niestety nie wiem jak zrobić żeby atrybuty/pola w sekcji prywatnej komunikowały się ze sobą zakładając sytuacje ,że są w dwóch różnych klasach.

Nie mam bladego pojęcia czy to jest dobrze zaprojektowane , cały czas się douczam a projekt własny realizuje tylko w weekendy,nie znam jeszcze "za pan brat " struktur danych ani wzorców projektowych ,dla tego napisałem tu .

1

nie rob globalnej klasy do wyswietlania. Niech kazda ta klasa ktora ma jakis model niech ma swoj widok (view) i to niech to dba o wyswietlanie danych. Jak chcesz mozesz miec jakis controller ktory zawiera te wszystkie view i nimi zarzadza (ale nie wyswietla nic! po prostu wywoluje by view cos wyswietlilo)

czyli zamiast 1 klasy potrzebujesz 4 (3 view 1 controller)

@MarekR22 mial w tym przypadku racje ze to problem XY (zreszta jak prawie zawsze ;))

0

Wychodzi na to ,że wygodniej było to umieścić w newbie :P

0

Właśnie podchodzisz żle, co zauważył @MarekR22 Sam piszesz, od ogółu do szczegółu, a problem przedstawiasz odwrotnie. Chcesz wyświetlić różne dane - od tego zacznij projekt. Teraz jakie dane: 1) osoby zalogowanej 2) dane z kont 3) jakieś inne dane, Nie wiem, jak dalej chcesz to dzielic, ale tu masz pierwszy podzial klas, czyli dane tej osoby, zbior kont, inne_dane (nie wiem jakie, ale chiałes to masz). Podstawową dana powinienes miec jakiś unikalny numer wiążący te dane, które skadś będziesz wybierał. Ponieważ chcesz wyświetlac, to jako interface powinienes miec same gettery udostępnione klasie wyświetlającej. Teraz kwestia podejścia, czy wypełniasz pojedyncze pola, czy powiedzmy coś podobnego do grida, jeśli to drugie, to getter lepszy byłby w postaci

string getValue(int akind);

zamiast int czasami lepszy byłby enum, ze względu na pilnowanie wartości przy pojedynczych wywołaniach oraz czytelniejszym opisie.
w innym wypadku możesz stworzyć:

string getName();

itd, jeśli potrzebujesz, - jak piszę, zależy od wizji - wtedy różnych wzorców używasz. Ale zamiast się denerwować, skup się na tym by prawidłowo opisać problem, bo to na prawdę pomaga przy projektowaniu a z czasem jak nabierzesz doświadczenia, będzie to bardziej czytelne.

0

Byłem pewien ,że się starałem przy opisie :D , przepraszam @MarekR22 . :)

1

Zamiast opisywać problem prozą (w sposób który jest dla nas niezrozumiały), wklej kod jaki już masz.
Następnie opisz co ma się stać z punktu widzenia użytkownika końcowego (problem X).
Na razie zapomnij o tym jak sam chybabyś to zrobić (problem Y).
Coś w stylu: Jaku użytkownik końcowy chciałby zobaczyć posortowaną (po nazwiskach) listę klientów. Dane klient powinny zawierać, imię nazwisko numer konta.

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