Будет ли этот класс считаться абстрактным классом, потому что он имеет одну виртуальную функцию? Я все еще был в состоянии создать объект Animal и вызвать getFoodCost ();
Нет. В C ++ «абстрактный класс» обычно относится к классу с чистой виртуальной функцией :
class Abstract {
public:
virtual void PureVirtual() = 0; // no implementation
};
class NotAbstract {
virtual void NotPureVirutal() {
// Some implementation
}
};
Я думал, что абстрактные классы не могут быть созданы.
Да, это правильно. Это потому, что абстрактные классы имеют функции без обязательной реализации. У него нет способа создать экземпляр экземпляра напрямую. Он использует наследование и указатели / ссылки для ссылки на абстрактный класс.
Означает ли это, что объекты могут иметь виртуальные функции и не считаться абстрактным классом?
Да. Опять же, абстрактные классы - это классы, которые имеют чисто виртуальные функции. Это отличается от обычной виртуальной функции. Как обсуждалось выше, чисто виртуальные функции не имеют требуемой реализации. С другой стороны, обычные виртуальные функции должны иметь связанную с ними реализацию, чтобы их можно было создавать.