簡體   English   中英

抽象類和虛函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM