Chcę zmienną obiektu nadrzędnego zmieniać w obiekcie potomnym tak, żeby inny obiekt potomny mógł odczytywać zmienioną wartość.
Witam,
Zobacz czy słowo kluczowe BASE coś Ci pomoże.
Pozdrawiam,
mr-owl
Że niby tak?:
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.
http://www.daniweb.com/software-development/cpp/threads/131659/how-exactly-to-use-extern