有时候,基类中的虚函数是为了派生类中的使用而声明定义的。此类函数我们叫做纯虚函数,不需要写成空函数的形式,一般只需要声明成:
virtual 函数类型 函数名(形参表列)=0;
最后面的“=0“并不代表函数返回值为0,只是形式上的作用,告诉编译系统”这是纯虚函数”;
这是一个声明语句,最后应有分号。
但是,不代表此函数不能定义,下面转载的文章说明了对纯虚函数定义和调用的方式
看代码时时无意看到代码里某类的纯虚函数居然有实现,吓我一跳,果真学无止境啊!
在此转载相关文章一篇,以便遗忘:https://blog.csdn.net/happymawolf/article/details/6369585
今天,我读到《effective c++》的第34条款,里面竟然提到纯虚函数也是可以定义的,大吃一惊,赶快打开vs2005,自己编写了一段代码,编译运行,发现竟然真的可以!
class A
{
public:
virtual void pureVirtualFunc() = 0;
};
void A::pureVirtualFunc()
{
cout << "I'am pureVirtualFunc" << endl;
}
class B : public A
{
public:
void pureVirtualFunc()
{
A::pureVirtualFunc();
cout << "I belong to B!";
}
};
int main(void)
{
B b;
b.pureVirtualFunc();
return 0;
}
运行结果:
I’am pureVirtualFuncI belong to B!请按任意键继续. . .
原来抽象类是可以对纯虚函数进行定义的,在其子类中也是可以使用抽象父类的缺省实现!这一切对我来说显得这么突然!好像腿脚一软,站不稳了!是的,以前天天啃个不停个的教材竟然存在如此偏差!等等!好像教材里也没错!里面并没有说“不能”进行函数实现,而是根本就没有提到要去实现。所以老师和天真的我们都默认为不能实现咯!
参考: