Wskaźnik na zmienną składową prywatną - is it possible?

0

Cześć, podobno nie można ustawić wskaźnika na zmienną, która jest ustawiona jako prywatna.
Natomiast, w VC++ udało mi się tego dokonać w następujący sposób:

class klasa
	{
	private:
	double x;
	public:
	double& get_x(){return x;}
	void set_wsk(double*& wsk){wsk = &x;}
	void show(){cout << "x = " << x << endl;}
	};
void main()
	{
	klasa xxx;
	double* wska;
	//wska = &xxx.getx();
	xxx.set_wsk(wska);
	xxx.show();
	*wska = 3.0;

	xxx.show();
	}

Moje pytanie brzmi: czy to jest błąd środowiska, czy mój zapis jest prawidłowy i w ten sposób można zapisywać i modyfikować zmienne prywatne? Naturalnie tak nie powinno się robić - to oczywiste!
Pozdrawiam i dzięki z góry za wyjaśnienie problemu.

0

Nie, to nie jest błąd - można to zrobić:

class X {
public:
  int *pointer() {
    return mPointer;      
  }
 
private:
  int *mPointer;
};
 
int main() {
  X x;
  
  int *ptr = x.pointer();
  
  *ptr = 3;
        
  return 0;
}

Dostęp tak naprawdę uzyskujesz wewnątrz klasy (czyli tam, gdzie możesz) i następnie udostępniasz ten prywatny wskaźnik publicznie.
Oczywiście psuje to enkapsulację i nie powinno się tego stosować, jak słusznie zauważyłeś.

0

Ok, dzięki.

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