如何调用纯虚拟函数
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
以下的任何覆盖器。这意味着a::a();
内部的调用this->pf();
将失败。
如果您真的想调用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();
}
相关文章:
- C++无法定义虚拟函数 OUTER 类和头文件
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 类型擦除的std::function与虚拟函数调用的开销
- 重写虚拟函数和继承
- 用纯虚拟函数兜圈子
- 为什么使用存储在虚拟方法表中的地址调用虚拟函数的函数会返回垃圾?
- 禁止子函数调用父级的抽象(或虚拟)函数
- 无法在子类中使用虚拟函数C++
- 无法在派生对象上运行虚拟函数
- 我可以调用从 main() 覆盖的虚拟函数吗?
- 在 C++ 中将函数获取和设置为虚拟函数
- 使用在堆栈上创建的对象调用虚拟函数
- 为什么在这种情况下不调用我的虚拟函数实现?
- 在C++中使虚拟函数私有化
- 模板继承类中的虚拟函数
- 为什么构造函数的虚拟函数调用有时有效,但其他调用却无效
- doxygenc++虚拟函数和实现
- 如何从派生类函数中调用虚拟函数