#include <iostream>
using namespace std;
class B
{
B();
public:
virtual void print()=0;
};
void B::print()
{
cout << "B::print";
}
int main()
{
B *bp;
bp->B::print(); /* Type-A works fine */
bp->print(); /* Type-B segmentation fault */
return 0;
}
在上面的代码中,我试图通过'bp'调用纯虚函数。 现在,在主功能有两种类型的呼叫(A型,B型)的。我的问题是为什么A有效,但B没有。此外,为什么编译器允许在不创建对象的情况下调用非静态函数。纯虚函数的奇怪行为
回复:“*为什么编译器允许在不创建对象的情况下调用非静态函数*”因为编译器假定您知道自己在做什么。编译器没有简单的方法来检查在一般情况下'bp'是否指向有效的东西。 –
根据您的警告级别,您应该看到类似'warning C4700:未初始化的局部变量'bp'used'。 – Derek