Witam, napotkałem na swojej programistycznej drodze kolejny problem, a bez waszej wiedzy i doświadczenia będę stał w miejscu:). Napisałem program czysto hipotetyczny obrazujący problem jaki napotkałem w bardziej rozbudowanym programie
Opis Zagadnienia
Klasa Figura musi być klasą abstrakcyjną ma wiele więcej innych metod czysto wirtualnych których dla uproszczenia nie dodawałem.
zależy mi na wyświetlaniu wyników dodawania raz obiektów Klasy Kolo, a innym razem obiektów klasy np Trójkąt, (realizacja dodawania tych klas rożni się od siebie.), przydatna będzie w takim razie funkcja "Wyświetl", uniwersalna dla obu klas.
Chciałbym napisać ją tylko raz dla obu Klas. Z racji że Klasa Bazowa jest abstrakcyjna, to przesyłam argumenty tej funkcji jako referencje.
Opis Problemu:
- Po odkodowaniu linijki
// cout <<"Gdy mnie odkomentujesz bede dzialac !\n";
Program działa.
a zakomentowany zawiesza sie :).
- Ostrzeżenie jakie dostaję
'wynik' is used uninitialized in this function [-Wuninitialized]|
Kod
#include <iostream>
using namespace std;
class Figura
{
public:
int a;
public:
virtual Figura & operator+(Figura &bryla)=0;
};
//********************************************************************************
class Trojkat : public Figura
{
public:
Trojkat()
{
a=1;
}
friend ostream & operator <<(ostream & napis, Figura &bryla);
virtual void czystoWirtualna() {};
virtual Figura & operator+(Figura &bryla)
{
// cout <<"Gdy mnie odkomentujesz bede dzialac !\n";
Figura * wynik;
wynik->a = this->a + bryla.a + 100; // troche inna operacja
return *wynik;
}
};
//********************************************************************************
// Ta funkcja operatorwa dla kazdej klasy pochodnej bedzie taka sama
ostream & operator <<(ostream & napis, Figura &bryla)
{
napis << bryla.a;
return napis;
}
//********************************************************************************
// Chce aby funkcja byla uniwersalna dla Kazdej z pochodnych Klas od Figury, zalozmy zejest bardzo skomplikowana
void Wyswietl(Figura & f1, Figura & f2)
{
cout << f1 + f2;
}
//********************************************************************************
int main()
{
Figura *wsk1, *wsk2;
Trojkat t1, t2;
wsk1 = &t1;
wsk2 = &t2;
cout << "t1= "<< t1 << endl << "t2= " << t2 << endl;
Wyswietl(*wsk1, *wsk2);
}
Dziękuję za odpowiedzi i pozdrawiam;