浅谈虚函数

虚函数主要是指用关键字virtual 修辞的。 

如果一点还不了解虚函数的还会问,为什么需要用虚函数, 使用虚函数又会有什么好处呢?

下面先举一个简单的例子吧:


class A {

public:

void show() {qDebug() << "this is test A";}

};


class B : public A{

public:

void show {qDebug() << "this is test B";}

};


然后开始使用两个函数:

A a;

B b;

A *p;

p = &a;

p->show() ;

p = &b;

p->show();

我们会发现,这两个输出的值都是父类的 this is test A。


而如果我们在父类A 里面加一个关键字, virtual 让它变成虚函数:

 

class A {

public:

virtual void show() {qDebug() << "this is test A";}

};

然后再次使用两个函数:

A a;

B b;

A *p;

p = &a;

p->show() ;

p = &b;

p->show();


我们会发现,这两个输出的值都是 this is test A  ,  this is test B;


这就是所谓的多态, 父类生成的对象, 被赋值给子类或父类的对象时, 如果是虚函数的话, 会根据赋值对象来选择对应的接口, 当然,如果子类没有重写父类的虚函数,则直接调用父类的。 这也使用户,多一个选择接口。 


谈到虚函数, 就容易联想到纯虚函数。

什么是纯虚函数, 又有什么特点呢?

1.

纯虚函数,是声明后面加了一个=0, 下面列举一下三个各自的声明特点:

普通函数: void test();

虚函数: virtual void test();

纯虚函数: virtual void test() = 0;


2.纯虚函数不能有定义。它只需声明, 而且子类,必须为父类的纯虚函数写出它的实现。

没有定义,那有什么用呢? 它的用户就在于, 保持统一性。 

比如说, 定义一个动物类, 它的特点是能知道它吃什么东西。 但每种动物吃的东西都不一样, 于是每种动物都应该实现,你想要的这个能吃什么东西的功能。

所以纯虚函数,就是实现, 父类所规定的,必须应该有的一个特点。 




 










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小K小Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值