Klasy zaprzyjaźnione,prywatna zmienna

0

Stwórz 3 klasy A,B,C takie, że: A będzie przechowywało prywatną zmienną typu integer o nazwie "i"
B będzie klasą zaprzyjaźnioną klasy A i będzie zawierać metodę ustawiającą wartość zmiennej "i" klasy A
klasa C będzie formalnie identyczna do klasy B, jednak nie będzie zaprzyjaźniona z klasa A
pokaz, ze zmienna "i" może być ustawiona metodą klasy B, "i" ze nie może być ustawiana tą samą metodą klasy C. Stworzyłem coś takiego... ale nwm jak ruszyć dalej

#include <iostream>

using namespace std;

class B;
class A{
int i;
friend class B;
};
class B{
public:
    void SetValueB(int i){
    i=5;}
    void Show(int i){
    cout<<i<<endl;
    };
};
class C{
public:
    void SetValueC(int i){
    i=5;}
    void Show(int i){
    cout<<i<<endl;
    };
};
int main(){

return 0;
}
};
3

ale nwm jak ruszyć dalej

W pierwszej kolejności sugerowałbym zmodyfiowanie kodu by się skompilował. Czyli poprawienie definicji metod oraz wstawienie brakujących średników.

EDIT
Kod możesz pisać i kompilować online wykorzystując wandbox.org albo godbolt.org.

0

@several: został poprawiony i się kompiluje

0

Ok. To teraz następny problem.

pokaz, ze zmienna "i" może być ustawiona metodą klasy B

Żeby to wykonać instancja klasy A musi znaleźć się jako pole klasy B.

0

@several: jak to zrobić?

0

@LanceHartt: Analogicznie do kodu z tutoriala https://www.p-programowanie.pl/cpp/klasy-c

0

Kurcze naprawde nie mam pojecia jak to zrobic XD, przejrzałem tutorial, nie moge znalezc odpowiedzi.... potrzebuje poprowadzenia za raczke i i zobaczyc zmiane w kodzie, aby ogarnac

2

Tak jak int i w A, tak samo A a w B

1

Możesz też przekazać wartość typu A jako parametr setValue (przez referencję/wskaźnik żeby to miało choćby pozory sensu ;) )

5

IMO zadanie jest głupie, bo friend jest jednym z tych funkcji języka, która jest bardzo rzadko używana (ja nie używam wcale), na dodatek przykład jest totalnie bezsensu, który nie daje uzasadnienia kiedy miało to by sens. Ja bym początkującego tego nie nauczał (a już na pewnno nie w ten sposób).

Jest jak jest, więc w drodze wyjątku gotowiec:
https://godbolt.org/z/P7Kq9s73j

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