Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Funkcje zaprzyjaźnione będące metodami innych klas

Ostatnio zmodyfikowano 2015-07-26 23:08
Autor Wiadomość
Roofy5
Temat założony przez niniejszego użytkownika
[C++] Funkcje zaprzyjaźnione będące metodami innych klas
» 2015-07-25 18:09:12
Mam taki oto projekcik:

C/C++
//Plansza.h
#include <allegro.h>

class CPole;
class CPlansza
{
private:
    BITMAP * bufor;
   
public:
    CPlansza( int x, int y );
    ~CPlansza();
   
    void rysuj( CPole & );
};

C/C++
//Pole.h
#include <allegro.h>

class CPlansza;
class CPole
{
private:
    int pozX;
    int pozY;
    int wysokosc;
    int szerokosc;
    BITMAP * image;
   
public:
    static int ilosc;
   
    CPole( char *, int = 0, int = 0 );
    ~CPole();
   
    friend void CPlansza::rysuj( CPole & );
};

Teraz chcę tą zaprzyjaźnioną funkcję zdefiniować w pliku "Plansza.cpp"

C/C++
//Plansza.cpp
#include "Plansza.h"

void CPlansza::rysuj( CPole & obiekt )
{
    obiekt.pozX++; //przykładowa funkcja
}

Problemem jest to iż otrzymuje komunikat że ta zawartość jest prywatna. Wiem że jeżeli deklaruję funkcję zaprzyjaźnioną, to ciało klasy, w której ma znajdować się definicja tej funkcji, powinno znajdować się "ponad" tą deklaracją. I teraz mam problem jak pogodzić to w dwóch plikach...
P-135237
DejaVu
» 2015-07-26 17:46:07
Klasa, która ma prywatne metody musi określić kto może manipulować składowymi prywatnymi. Czyli:
C/C++
class B
{
public:
    void metodaB();
};
class A
{
private:
    void metodaA();
   
    // Deklaracja przyjaźni:
    friend void B::metodaB();
};

void A::metodaA()
{
    //...
}


void B::metodaB()
{
    // Wykorzystanie przyjaźni:
    A a;
    a.metodaA();
}

int main()
{
    B b;
    b.metodaB();
    return 0;
}
P-135268
Roofy5
Temat założony przez niniejszego użytkownika
» 2015-07-26 19:50:38
Mam to napisane w taki sposób jak mówisz - w deklaracji jest odniesienie do innej klasy - problemem jest tylko to, jak te pliki teraz połączyć ze sobą ;)
P-135271
DejaVu
» 2015-07-26 23:08:16
Z tego wynika, że Twój temat obecnie nie dotyczy już  zaprzyjaźniania metod między klasami. Twój obecny problem to dzielenie kodu na kilka plików źródłowych.

Frazy, które należy wpisać w wyszukiwarkę google:
W skrócie:
Jeżeli klasa A zależy od klasy B, to plik zawierający klasę A powinien mieć include do pliku, zawierającego klasę B.
Czyli jeżeli klasa Plansza zależy od klasy Pole, to plik zawierający klasę Plansza powinien zawierać include do pliku, który zawiera klasę Pole.
P-135280
« 1 »
  Strona 1 z 1