Wpis z mikrobloga

Mam klasę Figura, do reprezentowania obiektów na ekranie i dziedziczącą z niej klasę FigTrojkat z przeładowaną metodą rysuj() .

W klasie odpowiedzialnej za wyświetlanie openGLa zrobiłem sobie Qlist na obiekty Figura.

QList<Figura> ListaDoNarysowania;


A w jej konstruktorze przypisuję do listy obiekt Trójkąta:

FigTrojkat FTR = new FigTrojkat(0,0);


ListaDoNarysowania.append(FTR);

Później w painGl mam coś takiego:

for(int i=0; i < ListaDoNarysowania.size(); ++i)


{


ListaDoNarysowania[i].rysuj();


}

Kompilator nie wywala błędów, a program i tak nie wyświetla trójkąta. Jak robię

FigTrojkat Tr(0,0);


Tr.rysuj();

to działa. Ktoś wie jak to naprawić?

#programowanie #cpp #qt
  • 13
@duffman: Po pierwsze, odpowiedz sobie na pytanie: dlaczego chcesz korzystać z polimorfizmu? W 99% przypadków tak na prawdę nie chcesz z niego korzystać. Jeśli jednak się uprzesz, to musisz operować na wskaźnikach:

QList ListaDoNarysowania;
ListaDoNarysowania.append(new FigTrojkat(0, 0));
for(int i=0; i < ListaDoNarysowania.size(); ++i)
{
ListaDoNarysowania[i]->rysuj();
}
Oczywiście, nie zapomnij później o zwolnieniu pamięci zaalokowanej przez operator new. Kwestie nazewnictwa pozostawię już bez komentarza.