Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Lista list obiektów dziedziczących po klasie abstrakcyjnej

Ostatnio zmodyfikowano 2013-04-29 20:04
Autor Wiadomość
Luk_Jab
Temat założony przez niniejszego użytkownika
Lista list obiektów dziedziczących po klasie abstrakcyjnej
» 2013-04-28 16:59:59
Witam, mam problem z programem, który należy chyba do kanonu jeśli chodzi o zrozumienie programowania obiektowego. Otóż mam utworzyć abstrakcyjną klasę figura, która zawiera wierzchołki(zaimplementowałem to w formie wektora par x, y) i 3 metody - pokaz wierzchołki, licz pole i licz obwód. Metody liczPole() i liczObwod() są wirtualne, i odpowiednio zaimplementowane dla klas pochodnych(kwadrat, trójkąt itp).

No i teraz dochodzę do właściwego problemu - w całym programie oprócz dziedziczenia mamy się jeszcze wykazać znajomością kontenerów. Jednym z zadań jest utworzenie listy obiektów dla każdej klasy pochodnej, oraz nadrzędnej listy list, która będzie zawierać listy obiektów danej klasy(tym sposobem będzie zawierać wszystkie utworzone obiekty). No i tutaj mam problem, podczas tworzenia listy muszę zadeklarować typ. Dla klas pochodnych nie sprawia to problemu, ale listy list nie umiem przeskoczyć. Polecenie
list<list<figura>>lista_l
 na zdrowy chłopski rozum utworzy listę której elementami będą listy obiektów klasy figura, ale klasa figura jest abstrakcyjna(stąd też nie można utworzyć jej obiektów) i wypluwa błąd
cannot instantiate abstract class
. No i nie bardzo mam pomysł jakiego typu ma być ta lista list. Będę wdzięczny za nakierowanie na właściwą drogę.
P-81380
pekfos
» 2013-04-28 17:05:17
std::list < std::list < figura *> >
P-81382
Luk_Jab
Temat założony przez niniejszego użytkownika
» 2013-04-29 14:50:23
Dzięki za pomoc, listę można tak utworzyć, ale mam problem z określeniem typów, i ze zrozumieniem tego co właściwie zrobiłeś w powyższej operacji. Gdy próbuję dodać nową listę do listy
lista_l.push_back(lista_t );
 otrzymuję komunikat:
 
cannot convert parameter 1 from 'std::list<_Ty>' to 'std::list<_Ty> &&'
. Jeśli dobrze rozumiem to && oznacza referencję na obiekt tymczasowy, i nie bardzo wiem co z tym zrobić :)
P-81488
pekfos
» 2013-04-29 15:02:57
C/C++
lista_l.push_back( std::move( lista_t ) ); //przenosi
Lub
C/C++
lista_l.emplace_back(); //tworzy i dodaje nową listę
P-81490
Luk_Jab
Temat założony przez niniejszego użytkownika
» 2013-04-29 17:51:06
lista_l.push_back( std::move( lista_t ) );
 wypluwa identyczny błąd jak powyżej,
lista_l.emplace_back();
 działa. Ale nie bardzo wiem czy uzyskałem to co powinienem. Mam listę lista_l, na której 4 razy zastosowałem metodę emplace_back. W jaki sposób teraz dodawać kolejne elementy(które będą obiektami moich klas pochodnych) do tej listy?
C/C++
list < list < figura *>>::iterator it = lista_l.begin();
list < figura *>::iterator it2 =( * it ).begin();
* it2 = trojkat( tab[ 0 ], tab[ 1 ], tab[ 3 ] );
 
error C2440: '=' : cannot convert from 'trojkat' to 'figura *'

Zakładając że pierwsza z list na liście to lista przeznaczona na trójkąty, to jak dodać do niej obiekt klasy trojkat, z 3 parametrowym konstruktorem?
P-81517
pekfos
» 2013-04-29 18:37:04
ale mam problem z określeniem typów, i ze zrozumieniem tego co właściwie zrobiłeś w powyższej operacji.
error C2440: '=' : cannot convert from 'trojkat' to 'figura *'
Wiesz, co to wskaźnik?
P-81522
Luk_Jab
Temat założony przez niniejszego użytkownika
» 2013-04-29 20:04:44
Wiem, tylko mam niestety małą intuicję jeśli chodzi o ich używanie, do tego dochodzi praktycznie zerowa znajomość obsługi list.

EDIT: Udało mi się uruchomić program i w końcu działa jak trzeba. Listy obiektów utworzyłem w formie list<figura*>, każdorazowo element do takiej listy dodaję push_back'iem z odpowiednim konstruktorem. No i ogarnąłem nawigację po liście, wszystko gra i trąbi.

Dzięki wielkie za pomoc, bez Twoich uwag nic bym nie wymyślił :) No i podłapałem trochę do czego praktycznego można wykorzystać wskaźniki.
P-81545
« 1 »
  Strona 1 z 1