LINUX.ORG.RU

История изменений

Исправление KennyMinigun, (текущая версия) :

Какая здесь ошибка?

Ошибка вот здесь:

pa xa = new pa ();

Должно быть хотя бы так:

pa* xa = new pa ();

А вообще в случае использования виртуальных функций обычно пранируется использовать их через «интерфейс» — базовый класс.

https://wandbox.org/permlink/vr5k1u5XycyXPxR1

struct Base {
    virtual const char * whoami() const = 0;
};

struct Foo : Base {
    const char * whoami() const override { return "I am Foo"; }
};

struct Bar : Base {
    const char * whoami() const override { return "I am Bar"; }
};

int main() {
    std::array<Base*, 2> objects = { new Foo, new Bar };
    for (Base* object : objects) {
        std::cout << object->whoami() << '\n';
    }
}

// Выводит
// I am Foo
// I am Bar

Исходная версия KennyMinigun, :

Какая здесь ошибка?

Ошибка вот здесь:

pa xa = new pa ();

Должно быть хотя бы так:

pa* xa = new pa ();

А вообще в случае использования виртуальных функций обычно пранируется использовать их через «интерфейс» — базовый класс.

https://wandbox.org/permlink/vr5k1u5XycyXPxR1

struct Base {
    virtual const char * whoami() const = 0;
};

struct Foo : Base {
    const char * whoami() const override { return "I am Foo"; }
};

struct Bar : Base {
    const char * whoami() const override { return "I am Bar"; }
};

int main() {
    std::array<Base*, 2> objects = { new Foo, new Bar };
    for (Base* object : objects) {
        std::cout << object->whoami() << '\n';
    }
}