Zmiana wartości zmiennej z klasy bazowej

0

Mam problem ze zmienieniem wartości tablicy w klasie bazowej.

#include<iostream>
using namespace std;

class Plansza{
public: 
char tab[3][3];
public:
	void rysuj(){                     // rysuje tablice
		for(int i=0;i<3;i++){
			for(int j=0;j<3;j++){
				cout<<tab[i][j];
			}
		}
	}
	friend class Strzal;
};

class Strzal: private Plansza{
public:
	void strzel(){   // zmienia wartosc tablicy[1][1] na 'A'
	tab[1][1]='A';	
	}
friend class Plansza;
};

int main(){
Plansza p;
Strzal s;
s.strzel();
p.rysuj();

getchar();
return 0;
}

Jestem początkujący więc proszę o w miarę jasną odpowiedź. Dlaczego wartość w klasie bazowej nie zmienia się na A ?

0

Strzał rozszerzający Planszę o_O? Gdzie tu sens i logika? Czy strzał jest szczególnym przypadkiem planszy? NIE!
Dziedziczenia nie stosuje się ze mieć dostęp do jakichś pól klasy. Poza tym czemu private a potem jakieś cuda z friendami? Może jednak nauczysz się podstaw ZANIM weźmiesz się za pisanie gry?...

0
 class Strzal: public Plansza{

Oczywiście przemyśl to co napisał kolega wyżej. A jeżeli chcesz mieć dostęp do pól klasy bazowej w klasie pochodnej powinieneś dziedziczyć z modyfikatorem public. Jeśli dziedziczysz za pomocą private wszystkie elementy z klasy bazowej będą niedostępne w klasach pochodnych.

1

@up: Dziedziczenie private NIE oznacza, że nic z klasy bazowej nie jest dostępne w klasie pochodnej(to ustala klasa bazowa, a nie modyfikator dostępu przy dziedziczeniu). Modyfikator ustala tylko co będzie widoczne na zewnątrz pochodnej z bazowej.
private: wszystko z klasy bazowej dostaje modyfikator private w pochodnej
protected: prywatne z klasy bazowej nadal zostają prywatne, reszta dostaje protected
public: nic nie zmienia - prywatne zostają prywatnym, chronione chronionymi, publiczne publicznymi

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