Dwie zależne klasy i zaprzyjaźniona funkcja składowa

Odpowiedz Nowy wątek
2011-08-20 07:40
rekrut
0

Oto dwie klasy wspomniane w tytule. W jaki sposób zmodyfikować kod żeby jedynie funkcja func była zaprzyjaźniona? (a nie cała klasa jak jest teraz.)

#ifndef TEST_H
#define TEST_H
 
class test
{
public:
    friend class test2;
private:
    int m_Counter;
};
 
#endif // TEST_H
#ifndef TEST2_H
#define TEST2_H
 
#include "include/test.h"
 
class test2
{
public:
    int func(test & obj) { return obj.m_Counter; }
};
 
#endif // TEST2_H
 

Pozostało 580 znaków

2011-08-20 09:45
0
friend int test2::func(test&);

Możesz mieć trochę zabawy z organizacją kodu, tak żeby wszystko było zdefiniowane na czas

class test;
 
class test2
{
public:
    int func(test & obj);
};
 
class test
{
private:
    int m_Counter;
public:
    friend int test2::func(test & obj);
    void print(){cout << m_Counter << endl;}
};
 
int test2::func(test & obj){obj.m_Counter = 100; return 100;}

Pozostało 580 znaków

2011-08-20 10:07
rekrut
0

Dzięki. Miałem nadzieję, że można rozwiązać ten problem przy zachowaniu deklaracji klas w oddzielnych plikach. ;)

Pozostało 580 znaków

2011-08-20 12:44
0

Bo można.
W jednym pliku test.h definicja klasy test, w odpowiadającym mu test.cpp definicja metod klasy test. W drugim pliku test2.h definicja klasy test2 z deklaracją zapowiadającą klasę test i w odpowiadającym pliku test2.cpp definicja metod klasy test2. W pliku test.h musisz jeszcze dołączyć plik test2.h


Pozostało 580 znaków

2011-08-20 17:13
rekrut
0

Rzeczywiście działa. :) Wcześniej próbowałem rozwiązać problem przy założeniu, że funkcja jest zdefiniowana w deklaracji klasy i wtedy (chyba) nie da się tego zrobić.

PS. Skoro w tak prostym przypadku zrobił się bałagan z nagłówkami, to jak wygląda zarządzanie nimi w większych projektach?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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