Witam,
otóż mam 3 klasy: klasę bazową "Obiekt" jej klasę pochodną "Gwiazda" i klasę "Galaktyka" mam przeciążyć operator strumienia oraz dodawania i usuwania obiektów (wspomnianych już gwiazd, później dodam kwazary, czarne dziury etc) do/z Galaktyki (wiem, łatwiej byłoby zrobić to za pomocą metod, ale taka jest część mojego zadania). To co zrobiłem do tej pory:
#include <iostream>
using namespace std;
class Obiekt{
private:
string nazwa;
public:
Obiekt(string we) : nazwa(we){}
string& jaka_nazwa(){ return nazwa; }
virtual void ktos_ty() = 0;
};
class Gwiazda : public Obiekt{
public:
Gwiazda(string we) : Obiekt(we){}
void ktos_ty(){ cout << jaka_nazwa() << "(gwiazda)" << endl; }
};
class Galaktyka{
private:
string nazwa;
int rozmiar;
int licznosc;
Obiekt** tab;
public:
Galaktyka(string nz, int r) : nazwa(nz), rozmiar(r), licznosc(0){
tab = new Obiekt*[rozmiar];
}
~Galaktyka(){
for(int i = 0; i < rozmiar; i++) delete tab[i];
delete[] tab;
}
//
friend Galaktyka operator + (Gwiazda* gw, Galaktyka g) {
if(g.licznosc < g.rozmiar){
g.tab[g.licznosc++] = gw;
}
else {
cout<< "Galaktyka pełna" <<endl;
}
}
friend ostream& operator << (ostream& out, const Galaktyka &g)
{
cout << g.nazwa << ":\n";
for(int i = 0; i < g.rozmiar; i++) g.tab[i]->ktos_ty();
}
};
int main(int argc, char * const argv[]) {
Galaktyka orion ("Orion", 15);
Gwiazda alpha("Alpha Centauri");
}
Nie mam pojęcia jednak jak mam poprawnie wywołać moje przeciążone dodawanie. Próbowałem dwóch potworków:
orion + alpha; //no match for 'operator+' in 'orion + alpha'
orion& + (aplha, orion); // no match for 'operator+' in '+(0, orion)'
Które jak widać nie zadziałały. Ma ktoś jakiś pomysł? Z góry dziękuję za wszelką pomoc!