运行代码:
//在B1中定义一个纯虚函数pvf(),重做练习1-4,并解释其结果。
#include"std_lib_facilities.h"
//----------------------------------------------------------------------
//定义B1类。
class B1
{
public:
virtual void vf() { cout<< "B1::vf()\n"; }
void f() { cout<< "B1::f()\n"; }
virtual void pvf()=0 { cout << "B1::pvf()\n"; }
};
//----------------------------------------------------------------------
//定义派生自B1的D1类
class D1 : public B1
{
public:
void vf() { cout << "D1::vf()\n"; }
void f() { cout << "D1::f()\n"; }
};
//-----------------------------------------------------------------------
//定义一个B1的引用
void call( B1& b1)
{
b1.vf();
b1.f();
}
//-----------------------------------------------------------------------
int main()
try{
B1 b1;
b1.vf();
b1.f();
D1 d1;
d1.vf();
d1.f();
call(d1);
}
catch (exception& e) {
cerr << "error:" << e.what() << '\n';
keep_window_open();
return 1;
}
catch (...) {
cerr << "Oops:unknown exception!\n";
keep_window_open();
return 2;
}
//-----------------------------------------------------------------------
运行结果:
结果解释:
通过声明一个或多个必须在派生类中被覆盖的纯虚函数来声明一个抽象类。
除非所有纯虚函数被覆盖了,否则该派生类还是抽象的。
抽象类不能构造对象。