一、虚函数的定义
c++中的虚函数时定义在基类中的函数,子类必须对其进行覆盖。在类中声明(无函数体的形式叫做声明)
虚函数的格式:
virtual void display();
二、虚函数的作用
1.定义子类对象,并且可以调用对象中未被子类覆盖的积累函数A同时在A中,又调用了已被子类覆盖的基类函数B。这样的话,我们这个时候就会调用到基类中的函数B,可我们本来应该调用的时子类中的覆盖函数B。如此,用虚函数就可以办到,从而解决这个问题。
举例:
没有用虚函数:
#include
using namespace std;
class Father
{
public:
void display() {cout<<“Father::display()\n”;}
void fatherShowDisplay() {display();}
};
class Son:public Father
{
public:
void display() {cout<<“Son::display()\n”;}
};
int main()
{
Son son;
son.fatherShowDisplay();
}
结果:Father::display()
使用虚函数:
#include
using namespace std;
class Father
{
public:
virtual void display() {cout<<“Father::display()\n”;}
void fatherShowDisplay() {display();}
};
class Son:public Father
{
public:
void display() {cout<<“Son::display()\n”;}
};
int main()
{
Son son;
son.fatherShowDisplay();
}
结果是:Song::display()
2.在使用指向子类对象的基类指针并调用子类中的覆盖函数时,如果该函数不是虚函数,那么就会调用基类中的该函数,如果该函数是虚函数,则会调用子类中的该函数。
没有使用虚函数:
#include
using namespace std;
class Father
{
public:
void display()
{cout<<“Father::display()\n”;}
};
class Son:public Father
{
public:
void display()
{cout<<“Son::display()\n”;}
};
int main()
{
Father *fp;
Son son;
fp=&son;
fp->display();
}
结果是:Father::display()
使用虚函数:
#include
using namespace std;
class Father
{
public:
void virtual display()
{cout<<“Father::display()\n”;}
};
class Son:public Father
{
public:
void display()
{cout<<“Son::display()\n”;}
};
int main()
{
Father *fp;
Son son;
fp=&son;
fp->display();
}
结果是:Son::display()
三、总结
虚函数提供了一个替换的作用,将一般不能实现的调用子类对象中的覆盖函数展示出来,在c++中具有重要的地位。
虚函数知识点总结
最新推荐文章于 2024-08-08 16:20:44 发布