[英]Overriding pure virtual functions such that derived class is not abstract
[英]abstract class and virtual functions
這個類是否會被認為是一個抽象類,因為它有一個虛函數? 我仍然能夠創建一個 Animal 對象並調用 getFoodCost();
我認為抽象類不能被實例化。 這是否意味着對象可以具有虛函數而不被視為抽象類?
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;
};
這個類是否會被認為是一個抽象類,因為它有一個虛函數? 我仍然能夠創建一個 Animal 對象並調用 getFoodCost();
不。在 C++ 中,“抽象類”通常是指具有純虛函數的類:
class Abstract {
public:
virtual void PureVirtual() = 0; // no implementation
};
class NotAbstract {
virtual void NotPureVirutal() {
// Some implementation
}
};
我認為抽象類不能被實例化。
對,那是正確的。 這是因為抽象類具有不需要實現的函數。 它沒有辦法直接實例化一個實例。 它使用繼承和指針/引用來引用抽象類。
這是否意味着對象可以具有虛函數而不被視為抽象類?
是的。 同樣,抽象類是具有純虛函數的類。 這與常規的虛函數不同。 如上所述,純虛函數不需要實現。 另一方面,常規虛函數需要有一個與它們相關聯的實現,因此它們可以被實例化。
抽象函數是一個virtual
成員函數,您對其執行= 0
,如
virtual double getPayOff() = 0;
具有至少一個抽象函數(包括繼承的函數)的類是抽象類。 只有純虛函數的類是所謂的純抽象類(也稱為接口類)。
由於您的getPayOff
函數不是純虛擬的,因此您的類也不是抽象的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.