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

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

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;}
0

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

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

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?

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