История изменений
Исправление
dearAmomynous,
(текущая версия)
:
Наличием таблицы виртуальных методов (Если таковые имеются)/Полиморфизмом.
class Foo {
public:
virtual void do_something() const = 0;
virtual ~Foo() = default;
};
class Bar : public Foo {
public:
virtual void do_something() const override {
printf("Quack!");
}
}
class Baz : public Foo {
private:
int m_some_number;
public:
virtual void do_something() const override {
printf("I contain this number: %d", this->m_some_number);
}
}
void make_it_do_something(const Foo *foo) {
if(foo != nullptr)
foo->do_something();
}
int main() {
Foo * bar = new Bar();
Foo * baz = new Baz();
delete baz;
delete bar;
}
А то что ты называешь наследованием - это агрегация/композиция, а не наследование.
Исходная версия Deleted, :
Наличием таблицы виртуальных методов (Если таковые имеются)/Полиморфизмом.
class Foo {
public:
virtual void do_something() const = 0;
};
class Bar : public Foo {
public:
virtual void do_something() const override {
printf("Quack!");
}
}
class Baz : public Foo {
private:
int m_some_number;
public:
virtual void do_something() const override {
printf("I contain this number: %d", this->m_some_number);
}
}
void make_it_do_something(const Foo *foo) {
if(foo != nullptr)
foo->do_something();
}
int main() {
Foo * bar = new Bar();
Foo * baz = new Baz();
delete baz;
delete bar;
}
А то что ты называешь наследованием - это агрегация/композиция, а не наследование.