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

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() **?

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.

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();
}
2

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.

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