Dziedziczone pole po klasie bazowej nie zmienia wartosci

0

Witam, mam pytanie, dlaczego tutaj x nie zmieni na stałe swojej wartosci na 20? przecież pole jest dziedziczone publicznie od klasy A

http://ideone.com/0xBWFJ

#include <iostream>
using namespace std;
 
class A{
protected:
	int x;
public:
void zmien_x()
	{
		x=20;
		cout << x<< endl;
	}
 
int zwroc()
{
 return x;
}
};
 
class B: public A
{
public:
	void wys_x()
	{
		cout << x+10 << endl;
		cout << zwroc()+10 << endl;
	}
 
 
};
 
 
int main()
{
	A obiekt;
	B o;
	obiekt.zmien_x();
	o.wys_x();
 
	return 0;
}

co zrobić, by ta wartośc była cały czas w swojej zmiennej?

przekazać przez parametr?

1

Bo nie rozumiesz jaka jest różnica między KLASĄ a OBIEKTEM. Klasa określa pewien zbiór obiektów o podobnych własnościach. Obiekty są fizyczną "realizacją klasy". Klasą może być "Krzesło", ale "Krzesło które masz pod tyłkiem" to jest KONKRETNY obiekt. Widzisz różnicę?

Teraz zrobiłeś sobie klasę Krzesło (A) oraz Krzesło_z_różowymi_obiciami (B). Następnie utworzyłeś obiekt klasy Krzesło i nazwałeś go obiekt oraz obiekt klasy Krzesło_z_oparciem i nazwałeś go o. Następnie podniosłeś oparcie krzesła obiekt (obiekt.zmien_x();) i dziwisz się że oparcie krzesła o pozostało be zmian...

Gdzie tu jakaś logika? Czy jeśli ja przewrócę teraz krzesło w moim biurze to ty na swoim krześle przed komputerem się wywalisz? No bo przecież i jedno i drugie to krzesło! ;]

0

przecież o.wys_x(); wypisze wartości przypadkowe - x nie jest nigdzie zainicjowane w obiekcie o! A obiekty obiekt i o to przecież 2 rożne obiekty, więc nie wiem, czego oczekujesz?

0

Odróżnij zmienne klasowe od zmiennych obiektowych. x jest zmienną obiektową, więc każdy obiekt ma własną kopię x i modyfikacja w jednym obiekcie nie ma wpływu na inny obiekt. Dla porównania zmień definicję klasy A na coś takiego i sprawdź wyniki:

class A {
protected:
    static int x;

public:
    void zmien_x()
    {
        x = 20;
        cout << x << endl;
    }

    int zwroc()
    {
        return x;
    }
};

int A::x = -11;

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