[C++] Dostęp do zmiennych nadrzędnego obiektu


(look997) #1

Chcę zmienną obiektu nadrzędnego zmieniać w obiekcie potomnym tak, żeby inny obiekt potomny mógł odczytywać zmienioną wartość.


(mr-owl) #2

Witam,

 

Zobacz czy słowo kluczowe BASE coś Ci pomoże.

 

Pozdrawiam,

 

mr-owl


(look997) #3

Że niby tak?:


(KamilDz) #4

Nie wiem czy dobrze zrozumiałem co jest problemem. Dla pewności. Klasy potomne mają dostęp do zmiennych klas nadrzędnych jeśli zmienne te zadeklarowane są jako public. np:

class baza{
  public: int test; // zamiast pubic może być protected
};
class dziedzic : public baza{
  public: void ustawtest(int a){test=a;};
};

Jeśli chcesz żeby wszystkie obiekty dzieliły tą samą wartość to używasz static, przykład:

#include <iostream>
#include <string>
using namespace std;


class baza{
   public: static int test;
};
class dziedzic : public baza{
   public: void ustawtest(int a){test=a;};
};

//musimy utworzyć zmienną, sama deklaracja w klasie nie wystarcza.
int baza::test;

int main(){
   baza b1;
   dziedzic c1,c2,c3;

   // Możemy zmieniać test przy pomocy każdego obiektu i klasy. Efekt zmiany tyczy się wszystkich obiektów, jest globalny.
   c1.ustawtest(59);
   cout <<b1.test<<" "<< c1.test<<" "<<c2.test<<" "<<c3.test<<endl;
   b1.test=50; //obiekt klasy bazowej
   cout <<b1.test<<" "<< c1.test<<" "<<c2.test<<" "<<c3.test<<endl;
   c3.test=45;
   cout <<b1.test<<" "<< c1.test<<" "<<c2.test<<" "<<c3.test<<endl;
   dziedzic::test=83;
   cout <<b1.test<<" "<< c1.test<<" "<<c2.test<<" "<<c3.test<<endl;
   baza::test=85;
   cout <<b1.test<<" "<< c1.test<<" "<<c2.test<<" "<<c3.test<<endl;
return (0);
}

Jeśli chcesz natomiast między dwoma plikami .cpp dzielić jedną zmienną globalną to używasz extern.