虚函数的作用是在父类中定义函数时,尚未知道由哪个子类来调用的情况下,提供一种自动指向,有点类似 java 的向上转型的意思,还是看代码吧,如果没有使用虚函数
#include <iostream> using namespace std; class animal { public: void shout() { cout<<"animal"<<endl; } void call_shout(animal *a) { a->shout(); } }; class dog : public animal { public: void shout() { cout<<"wang"<<endl; } }; int main() { animal a; dog d; a.call_shout(&d); }
输出是
animal
使用虚函数之后
#include <iostream> using namespace std; class animal { public: virtual void shout() { cout<<"animal"<<endl; } void call_shout(animal *a) { a->shout(); } }; class dog : public animal { public: void shout() { cout<<"wang"<<endl; } }; int main() { animal a; dog d; a.call_shout(&d); }
输出是
wang
至于纯虚函数,就是父类只声明,不定义,留给子类去定义,有点像 java 的 interface
#include <iostream> using namespace std; class animal { public: virtual void shout() = 0; }; class dog : public animal { public: void shout() { cout<<"dog"<<endl; } }; class cat : public animal { public: void shout() { cout<<"cat"<<endl; } }; int main() { dog d; d.shout(); cat c; c.shout(); }
输出是
dog cat
另外,关于这个内容,这里有篇文章写的不错,http://www.cnblogs.com/MS-Fran…