抽象 class 和虚函数

abstract class and virtual functions

这个 class 会被认为是一个抽象 class 因为它有一个虚函数吗?我仍然能够创建一个 Animal 对象并调用 getFoodCost();

我认为抽象 classes 无法实例化。这是否意味着对象可以有虚函数而不被认为是抽象的class?

class Animal
{
public:
    Animal();
    int getBabies();
    double getFoodCost();
    virtual double getPayOff();
    int getQty();

    void incAge();
    void setAge(int);

protected:
    int counter=0;
    int age;
    int cost;   
};

Would this class be considered an abstract class because it has one virtual function? I was still able to create an Animal object and call getFoodCost();

没有。在 C++ 中,"Abstract Class" 通常指的是 class 和 pure virtual function:

class Abstract {
public:
    virtual void PureVirtual() = 0; // no implementation
};

class NotAbstract {
    virtual void NotPureVirutal() {
        // Some implementation
    }
};

I thought abstract classes cannot be instantiated.

是的,没错。这是因为抽象 classes 具有不需要实现的功能。它没有办法直接实例化一个实例。它使用继承和 pointers/references 来引用抽象 class.

Does this mean objects can have virtual functions and not be considered abstract class?

是的。同样,抽象 classes 是具有纯虚函数的 classes。这与常规的虚函数不同。如上所述,纯虚函数不需要实现。另一方面,常规虚函数需要有一个与之关联的实现,因此它们可以被实例化。

抽象函数是一个 virtual 成员函数,您可以对其执行 = 0,如

virtual double getPayOff() = 0;

一个class至少有一个抽象函数,包括继承的,是一个抽象class。具有 only 纯虚函数的 class 是所谓的 pure 抽象 class (也称为 接口 class).

由于您的 getPayOff 函数不是纯虚拟的,因此您的 class 也不是抽象的。