如何调用纯虚函数?

sre*_*ree 0 c++ pure-virtual

如何在这里调用纯虚函数"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; 
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*eas 6

a类型的构造函数内部,对象仍然是类型a.任何对虚函数的调用都不会a在层次结构中调度任何覆盖.这意味着this->pf();内部调用a::a();将失败.

如果你真的想打电话a::pf,那么你必须禁用该电话的动态调度,你可以通过添加额外的资格来实现:( a::pf()this->a::pf();)

  • @Spook:语言确实允许它,强制子类型实现一个函数但提供合理的默认值可能很方便.`pure`限定符将要求用户在派生类型中提供覆盖,即使它只是转发调用`int b :: pf(){return a :: pf(); }` - 调用默认实现. (2认同)