Abstrakcja w C++

0

Witam,

Interesuje mnie przekazywanie właściwosci abstrkcyjnosc metody dalej w hierachi dziedczenia. Jest to manwery w moim przypadku wyniesiony z Javy

Na logike to powinna byc tak:

 class B{
public:
    virtual void area ()=0;
};

class C : public B {
    
public:
    virtual void area ()=0;
};

int main ()
{
    C *b = new C();
}

Chcę aby metoda area nadal pozostala abstrakcyjna po dziedziczenia czyli klasa C rowniez abstrakcyjna. Jak to się robi w C++ ? :)

0

Jeśli jej nie zaimplementujesz to nadal będzie czysto wirtualna. Wystarczy ci:

 class B{
public:
    virtual void area ()=0;
};
 
class C : public B {
};
 
int main ()
{
    C *b = new C(); //to nie ma prawa się kompilować bo klasa C jest abstrakcyjna
}

Nie bardzo rozumiem gdzie widzisz problem.

0

Tak, za bardzo chcialem uproscic

 class B{
public:
    virtual void area ()=0;
};

class C : public B {
public:
    virtual void area ()=0;
    void print() {}
};

int main ()
{
    C *c = new C();
}

W Javie byla mozliwosc wywolanie pozniej c.print()

0

Niestety nie wiem jak w Javie (akurat mało... bardzo mało pisałem), ale coś takiego zadziała tak jakbyś oczekiwać:

class C : public B {
public:
    virtual void area () { };
    void print() { }
};

PS. Moim zdaniem zapis virtual typ metoda() = 0; do oznaczenia metody i klasy jako abstrakcyjnej to jedna z najbardziej portych rzeczy w C++...

0

@Nie_Podam_Ci gadasz tutaj jakieś herezje. Pokaż kod javowy który pozwoli na utworzenie klasy abstrakcyjnej.

0

PS. Moim zdaniem zapis virtual typ metoda() = 0; do oznaczenia metody i klasy jako abstrakcyjnej to jedna z najbardziej portych rzeczy w C++

to zapisuj sobie

virtual typ metoda() = NULL;

teraz lepiej?

0

Co nie zmienia faktu, że takie słowo kluczowa jak abstract jednak jest bardziej czytelne niż metoda() = NULL

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