logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

VC++ - Dostęp do zmiennej X w klasie View z klasy generycznej

mrrudzin 12 Sty 2006 21:50 1065 7
REKLAMA
  • #1 2174536
    mrrudzin
    Poziom 39  
    Posty: 5940
    Pomógł: 516
    Ocena: 580
    Mam dwie klasy w projekcie Visual C++. Klasę View i generyczną stworzoną przeze mnie.
    W klasie View znajduje się zmienna X

    W jaki sposób moge dobrać się do tej zmiennej z klasy generycznej?
  • REKLAMA
  • #2 2177514
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 240
    A jakiego typu jest zmienna i skąd chcesz się do niej dostać?
  • REKLAMA
  • REKLAMA
  • #4 2179195
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 240
    Sory, nadal nie rozumiem idei problemu (odnosze wrażenie ze to o czym piszesz powinno działać ot tak), może napisz jakie masz objawy i co chcesz uzyskać.
  • #5 2179287
    mrrudzin
    Poziom 39  
    Posty: 5940
    Pomógł: 516
    Ocena: 580
    Problem polega na tym że nie wiem jak się za to zabrać.
    Nie ma tu żadnych haków itp.
    Chodzi o nawiązanie komunikacji pomiędzy klasami.
    Jak człowiek zaczyna programować obiektowo - na początku ma problemy (jeżeli wcześniej wszystko było strukturalnie).
  • #6 2179312
    -=mINA87=-
    Poziom 13  
    Posty: 91
    Pomógł: 1
    Ocena: 1
    hmmmmmmmm
    a jak z prywatnością ? w kalsie bazowej, w której masz zmienną możesz definiować typy dostępu - public, private, protected. Jeżeli zmienna nie jest typu private, to możesz się do niej dostać z klasy specjalizowanej bez problemu jakby zmienna ta była członkiem klasy wyprowadzonej.. jeżeli nic Ci to nei mówi, to mogę szerzej objaśnić i przykład zapodać.
  • REKLAMA
  • #7 2179494
    mrrudzin
    Poziom 39  
    Posty: 5940
    Pomógł: 516
    Ocena: 580
    [quote]
    to możesz się do niej dostać z klasy specjalizowanej bez problemu jakby zmienna ta była członkiem klasy wyprowadzonej.. jeżeli nic Ci to nei mówi, to mogę szerzej objaśnić i przykład zapodać.
    [quote]
    Jak najbardziej

    Ja (po konsultacjach) rozwiązałem problem w taki sposób :
    W klasie generycznej (np MOJA) stworzyłem funkcje ustawX typu void.
    W niej
    {
    double y=x;
    }

    w klasie doc miałem obiekt
    Moja mmoja typu public (którego używałem jeszcze do innych rzeczy)


    w klasie view była zmienna ZY do której chciałem się dostać.
    Stworzyłem f-cje Przekaz
    {
    NazwaklasyDoc* pDoc = GetDocument();
    pDoc->mmoja.ustawX(ZY);
    }
  • Pomocny post
    #8 2179527
    -=mINA87=-
    Poziom 13  
    Posty: 91
    Pomógł: 1
    Ocena: 1
    to chyba mowisz o zawieraniu a nie dziedziczeniu :p i uzywasz akcesorow, co jest najlepszym rozwiązaniem.... ale coś dalej mi nie gra :p powinieneś mieć to tak:
    
    class A
    {
    public:
      void setY(double _y) {mY = _y;};
    protected:
      double mY;
    }
    
    class B
    {
    public:
      void doSmth() {mA.setY(1.0f);};
    private:
      A mA;
    }
    
    albo dziedziczeniem:
    
    class C : public A
    {
    public:
         void doSmth() {mY = 1.0f;};
    };
    


    //edit:
    a odnoscie Twojego akcesora - nie mozesz miec w funkcji deklaracji zmiennej, bo to wtedy jest to zmienna lokalna i nei modyfikujesz skladowej klasy, tylko zmienna lokalna, ktora po wyjsciu pzoa zakres(wyjscie z metody) zostanie zniszczona. :]

Podsumowanie tematu

✨ W dyskusji poruszono problem dostępu do zmiennej X typu double znajdującej się w klasie View z poziomu klasy generycznej w projekcie Visual C++. Omówiono kwestie związane z modyfikatorami dostępu (public, private, protected) oraz różnicę między dziedziczeniem a zawieraniem (kompozycją). Zaproponowano rozwiązanie polegające na utworzeniu w klasie generycznej metody ustawX, która przyjmuje wartość zmiennej z klasy View przekazywaną przez funkcję Przekaz w klasie View, wykorzystującą wskaźnik do dokumentu (GetDocument). Podkreślono, że najlepszą praktyką jest stosowanie akcesorów (setterów) do modyfikacji zmiennych członkowskich, a nie bezpośredni dostęp do zmiennych prywatnych. Przykłady kodu ilustrowały zarówno dziedziczenie, jak i zawieranie obiektów jako metody dostępu do zmiennych klasy bazowej.
Wygenerowane przez model językowy.
REKLAMA