Witam mam problem z pracą domową z odcinka 4 obiektowego c++. Dlaczego gdy linijkę 20 w pliku .h zamienię na friend class Prostokat to wszystko działa? Kompilator pokazuje mi to co w załączonym obrazku.
Nie da się za pomocą zaprzyjaźnionej metody dostać do atrybutów innej klasy? Tak jak pisałem gdybym zamienił na friend class Prostokat to by działało ale ja chciałbym zrozumieć dlaczego z tą zaprzyjaźnioną funkcją nie działa. Byłbym bardzo wdzięczny jakby ktoś to wytłumaczył.
#include <iostream>
#include "home.h"
using namespace std;
Punkt::Punkt(string n, float xx, float yy)
{
nazwa=n;
x=xx;
y=yy;
}
void Punkt::pobierz()
{
cout<<endl<<"Wprowadz kolejno nazwe, x, y: ";
cin>>nazwa>>x>>y;
}
void Prostokat::pobierz()
{
cout<<endl<<"Wprowadz kolejno nazwe, x, y, szerokosc, wysokosc: ";
cin>>nazwa>>x>>y>>szerokosc>>wysokosc;
}
Prostokat::Prostokat(string n, float xx, float yy, float s, float w)
{
nazwa=n;
x=xx;
y=yy;
szerokosc=s;
wysokosc=w;
}
void Prostokat::sedzia(Punkt k)
{
if ((k.x>=x&&k.x<=x+szerokosc)&&(k.y>=y&&k.y<=y+wysokosc))
{
cout<<endl<<"TAK Punkt "<<k.nazwa<<" lezy w prostokacie: "<<nazwa<<endl;
}
else
{
cout<<endl<<"NIE, Punkt "<<k.nazwa<<" NIE lezy w prostokacie: "<<nazwa<<endl;
}
}
#include <iostream>
#include "home.h"
using namespace std;
int main()
{
Punkt p1;
Prostokat p2;
p2.sedzia(p1);
return 0;
}
#include <iostream>
using namespace std;
class Punkt;
class Prostokat
{
string nazwa;
float x, y, szerokosc, wysokosc;
public:
Prostokat(string="BCDE", float=0, float=0, float=4, float=2);
void pobierz();
void sedzia(Punkt k);
};
class Punkt
{
friend void sedzia (Punkt k);
string nazwa;
float x, y;
public:
Punkt(string="A", float=4, float=2);
void pobierz();
};