簡體   English   中英

如何調用純虛函數?

[英]How do I invoke the pure virtual function?

如何在此處調用純虛函數“ pvf()”? 有人可以對此有所解釋嗎? ................................................... .............

#include<iostream>

using namespace std; 

class a
{
public:
    a()
    {
        this->pvf();
        this->p();
    }

    virtual int pvf() = 0;

    virtual void p()
    {
        cout << "\n p fun";
    }
};

int a::pvf()
{
    cout<<"\n pure";
}

class b : public a
{
    int i,j,k;

    void o()
    {
        cout<<"\n der";
    }
};

int main()
{
    //b b1; 
}

a類型的構造函數內部,對象仍然是a類型。 任何調用虛函數將不會有任何派出置換器婁a層次結構中。 這意味着調用this->pf(); a::a();內部a::a(); 將失敗。

如果您確實要調用a::pf ,那么必須禁用該調用的動態調度,並通過添加額外的限定條件來做到這一點: a::pf() (或this->a::pf();

我假設您的意思是pf ,因為p不是純凈的。 您可以通過指定非虛擬呼叫來調用它:

this->a::pf();

或者,也許您在問,為什么觀察到從構造函數中調用的純虛函數,而不是派生類中可能缺少任何重寫?

從構造函數或析構函數調用虛擬函數會根據當前構造的類而不是最終的派生類來選擇函數。 如果該函數在當前類中是純函數,則行為是不確定的-如果它具有實現,則它可能會調用純函數,或者調用其他重寫,崩潰或您可以想象的任何其他事情。

#include<iostream>

using namespace std; 

class a
{
public:
    a()
    {

    }

    virtual int pvf() = 0;

    virtual void p()
    {
        cout << "\n p fun";
    }
};

int a::pvf()
{
    cout<<"\n pure";
}

class b : public a
{
    public:
    int i,j,k;

    int pvf(){cout<<" b pvf ";
    }
};

int main()
{
    b b; 
    b.a::pvf();

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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