Ponizej przyklad zawarty w ksiazce "Symfonia C++" na deklaracje przyjazni.
Wpisalem to do CodeBlocksa i niestety program mi sie wysypuje podczas konwersji w linijce gdzie jest napisany konstruktor dla klasy punkt.
Gdy konstruktor przeniose do ciala klasy punkt program dziala bezblednie. Czy moze mi ktos wytlumaczyc dlaczego?
Mozna by wysnuc wniosek ze po prosu konstruktor musi byc wewnatrz ciala klasy, ale przeciez konstruktor dla klasy kwadrat tez jest poza cialem klasy.
Gdzie jest problem ? - przegladnalem ten program i nie widze literowki ( jak jest literowka to splone ze wstydu:()
#include <iostream>
#include <string>
using namespace std;
class punkt;
class kwadrat
{
int x,y;
int bok;
string nazwa;
public:
kwadrat(int a, int b, int dd, string opis);
int sedzia (punkt &p);
};
class punkt
{
int x,y;
string nazwa;
public:
punkt(int a, int b, string opis);
void ruch(int n, int m)
{
x+=n;
y+=m;
}
friend int kwadrat::sedzia(punkt &p);
};
punkt::punkt(int a, int b, char *opis)
{
x=a;
y=b;
nazwa=opis;
}
kwadrat::kwadrat(int a, int b, int dd, string opis)
{
x=a;
y=b;
bok=dd;
nazwa=opis;
}
int kwadrat::sedzia (punkt &pt)
{
if((pt.x>=x)&&(pt.x<=(x+bok))
&&
(pt.y>=y)&&(pt.y<=(y+bok))
)
{
cout<<pt.nazwa<<"lezy na tle "<<nazwa<<endl;
return 1;
}
else{cout<<"AUT!"<<pt.nazwa<<"jest na zewnatrz "<<nazwa<<endl;
return 0;
}
}
int main()
{
kwadrat bo(10,10,40, "boiska");
punkt pi(20,20, "pilka ");
bo.sedzia(pi);
}