虚函数的作用是在父类中定义函数时,尚未知道由哪个子类来调用的情况下,提供一种自动指向,有点类似 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…