Błąd przy odwoływaniu się do funkcji przy dziedziczeniu

2018-10-27 19:38
0

Hej,
zaczynając pisać projekt, napotkałem na problem,
analogiczny problem do tego:

#include <iostream>
#include <vector>
#include <memory>

class A {
};

class B : public A {
public:
    void sayHello() { std::cout << "Hi ! Im class B"; }
};

int main()
{
    std::unique_ptr<A> a;
    a = std::make_unique<B>();

    a->sayHello(); 

    std::cin.get();
}

moje pytanie polega na tym, dlaczego a nie ma sayHello() ?

edytowany 1x, ostatnio: kameleo327, 2018-10-27 19:38

Pozostało 580 znaków

2018-10-27 19:52
2

Poniewaz deklarujesz jako A, to, ze przypisujesz pozniej B nie ma znaczenia. W A nusiala by byc taka metoda i to virtualna, zeby zadzialalo to tak jak mysle, ze chcesz, aby dzialalo... Mozna tez wymusic dzialanie castowaniem, ale to nie ladne jest.


Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie

Pozostało 580 znaków

2018-10-27 20:00
3
#include <iostream>
#include <vector>
#include <memory>

class A {
public:
   virtual void sayHello() {
      std::cout << "Hi ! I'm class A\n";
   }
};

class B : public A {
public:
   void sayHello() override { 
      std::cout << "Hi ! Im class B\n"; 
   }
};

int main() {
   std::unique_ptr<A> a = std::make_unique<A>();
   std::unique_ptr<A> b = std::make_unique<B>();
   a->sayHello();
   b->sayHello();
}

Nie pisz na priv. Zadaj dobre pytanie na forum.

Pozostało 580 znaków

2018-10-27 21:01
kq

Warto zauważyć, że w przykładzie bez polimorfizmu dynamicznego jest UB, ponieważ unique_ptr usuwa obiekt klasy bazowej, pomimo że jest to faktycznie obiekt dziedziczony.


Pozostało 580 znaków

Liczba odpowiedzi na stronę

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