Listy, dziedziczenia no method, bo nie potrzebna

0

Przepraszam, że to już mój 4 temat dzisiaj, ale mam z tym problemy i nic nie ogarniam

 
class figura {
	public:
		void jakas_funkcja() const;
	protected:
		//nieistotne zmienne
	};
...

class czworokat : public figura {
    public:
        czworokat(int,int,int,int,int,int,int,int);
        float pole() const { return 3;}
    };
...

class kwadrat : public czworokat {
    public:
        kwadrat(int,int,int,int,int,int,int,int);
        float pole() const;
    };

float kwadrat::pole() {... return p;}

list<figura> czworokaty;
...
list<list<figura> > figury;
czworokaty.push_back(czworokat(0,0,0,1,1,1,1,0));
figury.push_back(czworokaty);

        for(ListaList::const_iterator cq = figury.begin(); cq!=figury.end(); ++cq) {
                for(FiguraLista::const_iterator ci = (*cq).begin(); ci!=(*cq).end(); ++ci) {
                    ...
                    cout << "\nPole: " << ci->pole(); //błąd
                    }
                }
            }

Błąd:
error: 'const class figura' has no member named 'pole'| Nie wiem czy powinno być to const przy iteratorze, ale bez tego błąd wygląda analogicznie bez consta.

Dlaczego nie jest wywoływana po prostu funkcja z klasy kwadrat? Kiedy dodam funkcje pole do klasy figura, to ona jest wtedy wywoływana, a potrzebuję, aby wykonywała się funkcja z klasy której obiekt jest aktualnie obsługiwany.

0
class figura {
        public:
                void jakas_funkcja() const;
                virtual float pole() const=0;
        protected:
        };
0

To jedyne wyjście? Tak pisząc mam błąd który opisywałem w tym temacie: http://4programmers.net/Forum/C_i_C++/216358-cannot_allocate_an_object_of_abstract_type

0
class A
{
  public:
    virtual void funkcja() = 0;
};

class B : public A
{
  public:
    void funkcja() { ; }
};

int main() 
{
    vector<A*> v;
    v.push_back(new B);
    v[0]->funkcja();
    return 0;
}

Bez =0 tez moze byc oczywiscie, ale to "chroni" przed utworzeniem obiektu klasy, ktora ma dostarczac jedynie interfejs.

0

Miała być lista list. Już sobie jakoś poradziłem, dzięki za rady.

1 użytkowników online, w tym zalogowanych: 0, gości: 1