虚函数知识点总结

一、虚函数的定义
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++中具有重要的地位。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值