Witam
Ostatnio na wykładzie było trochę o przyjaźni między klasami...
W ramach utrwalenia wiedzy napisałem od taki kod i mam parę pytań
#include <iostream>
#include <conio>
#include <string>
#include <windows>
using namespace std;
class druga;
class pierwsza
{
private :
string imie;
pierwsza() {};
public :
pierwsza(string name);
pierwsza(string name,druga& d);
friend void justuj(string napis);
friend class druga;
};
pierwsza::pierwsza(string name) : imie(name)
{
justuj(imie);
}
class druga
{
private :
const string data_ur;
druga() {}
string lacz(string s1,string s2);
public :
druga(string age);
friend class pierwsza;
};
pierwsza::pierwsza(string name,druga& d) : imie(name)
{
justuj(d.lacz(imie,d.data_ur));
}
druga::druga(string age) : data_ur(age)
{
}
string druga::lacz(string s1,string s2)
{
string tmp = s1+" "+s2;
return tmp;
}
// fun zaprzyjaziona
void justuj(string napis)
{
int x = 40 - napis.length() / 2;
gotoxy(x,10);
cout << napis;
}
int main()
{
druga ta("10.10.2000 r.");
pierwsza ja("Twoje imie",ta);
getch();
return 0;
}
-
Definicje konstruktora klasy "pierwsza" muszę umieścić po klasie "druga" inaczej wywala błąd że pola i metody nie są jeszcze zdefiniowane, Czy taki błąd będzie występował np. jeśli klasy mamy w oddzielnych plikach .h .cpp ? Czy w ogole inaczej trzeba to zaprojektować aby pozbyć się tego błędu.
-
Czy takie przekazanie przez referencję tymczasowego obiektu to dobre rozwiązanie ? czy da się w inny sposób dobrać do pól i metod klasy drugiej
pierwsza::pierwsza(string name,druga& d) : imie(name)
{
justuj(d.lacz(imie,d.data_ur));
}
chodzi mi oczywiście wyłącznie o temat klas zaprzyjaźnionych nie alternatywne rozwiązania:)
Pozdrawiam