Kod metody czysto wirtualnej w klasie bazowej

0

... teoretycznie nie powinno być możliwe. Ale na przykład:

class bazowa {
    public:
        virtual void metoda () =0; // czysto wirtualna
    };
     
class pochodna : public bazowa {
    public:
        void metoda () {}; // implementacja w pochodnej
    };

Ale teraz

void bazowa::metoda () {}; // <-- implementacja metody czysto wirtualnej w klasie bazowej ???

int main () {
    pochodna obiekt;

    obiekt.metoda (); // z pochodnej
    obiekt.bazowa::metoda (); // z bazowej
    }

a przecież teoretycznie metody czysto wirtualne nie powinny mieć implementacji w klasie bazowej

Jakieś komentarze?

1

Jakieś komentarze?

Po co kombinujesz? ;-)

5

Na przyszłość szukaj w internecie - nie jesteś pierwszym, który wpadł na to pytanie :-P
http://stackoverflow.com/questions/2089083/pure-virtual-function-with-implementation

0

A co? Jest jakiś zakaz powtórnego pytania o rzeczy budzące ciekawość?

4

Zasadniczo na forum powinno zadawać się pytania, których nie można odnaleźć wpisując pierwsze-lepsze hasła w Google - tutaj c++ pure virtual method implementation.
I nie, nie jest to zakaz - tylko przejaw przestrzegania netykiety.

0

Chwila... Jeśli metoda ma implementacje (w klasie bazowej), to po prostu nie jest już czysto wirtualna. Aby była czysto wirtualna, w klasie bazowej musi być zadeklarowana jako =0 i wtedy klasa dziedzicząca z niej MUSI implementować jej kod (jeśli chcemy mieć możliwość tworzenia obiektów tej klasy). Jeśli metoda ma implementacje - powtarzam się - to nie jest czysto wirtualna i MOŻE być przeciążona (nadpisana?) w klasie dziedziczącej.

5

Gdybyś, zgodnie z radą @Patryk27, zgooglował podaną frazę, wiedziałbyś, że się mylisz. =0 wymusza implementację metody przez klasę dziedziczącą (albo nie da się utworzyć bezpośrednio jej instancji), ale nie zabrania podania "domyślnej" implementacji, którą można potem wywołać przez syntax Parent::method(...):

struct Foo
{
	virtual void foo()=0;
};

void Foo::foo(){
	BARK;
}

struct Bar : Foo
{
	void foo() override {
		BARK;
		Foo::foo();
	}
};

http://melpon.org/wandbox/permlink/1cglPGfd4sfYBDBe

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