Zmiana wartości zmiennej z klasy bazowej

2011-05-28 17:14
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 ?

edytowany 2x, ostatnio: Alpha_Beta, 2011-05-28 17:39

Pozostało 580 znaków

2011-05-28 18:33
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?...


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2011-05-28 19:09
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.

Pozostało 580 znaków

2011-05-28 19:24
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


edytowany 1x, ostatnio: byku_guzio, 2011-05-28 19:25
Nie masz do końca racji. Jeśli coś było private w bazowej to w pochodnej będzie niedostępne ;) tu akurat muszę się zgodzić z @goldenka - Shalom 2011-05-28 19:55
oczywiście, ale jak napisałem o tym decyduje bazowa. Modyfikator przy dziedziczeniu nie ma tu znaczenia. - byku_guzio 2011-05-28 19:57

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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