抽象 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 也不是抽象的。
这个 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 也不是抽象的。