c++多态继承和虚函数

前言:我们前一节简单学习了继承,这里继续深入,学习多态和虚函数


一、多态

多态的意思就是“多种形态”,即同一个方法的功能不同,最典型的例子就是父类的方法在子类中进行重写。这时候,方法的行为取决于你的对象,你建立的是父类,就调用父类的该方法的行为,你建立的是子类对象,就调用子类的该方法的行为。

格式:在java中,重写的方法要在末尾中加上关键字override,而在c++中,不再是这样,而是在要被重写的方法的声明前加上关键字virtual,也就是把他定义为虚函数,虚函数的意思就是这个方法会被重写

注意:父类和子类的该方法的声明前都要加上virtual,而父类和子类的该方法的定义前不在写virtual


二、虚函数

1.既然父类和子类都有相同名字的方法,只是作用不同,那我们如何去抉择选择哪个呢?最简单的就是使用不同的对象,然后用对象去调用各自的函数,比如父类为:class fulei ,父类对象为 st1,子类为class zilei,子类对象为st2 ,他们都有一个方法是show()。那么我们可以分别去创建父类子类对象去调用各自的show,比如st1.show()和st2.show().

但是,我们在使用时,经常用到用父类指针创建子类对象的方法,比如上面的 :fulei *st1 = new zilei。如果不使用virtual,那么程序将根据指针的类型选择方法,比如上面的指针类型为fulei,那么我们用st1.show()时调用的是父类类的show(),这显然不符合我们的设定,而当我们设置了virtual,程序将根据指针指向的对象类型选择方法,比如上面的指针指向的对象类型为zilei,那么我们用st1.show()时调用的是子类的show(),符合我们的设定。

补充:virtual除了要放在要被重写的方法前外,也要放在析构函数前。作用和前面的不同

2.我们知道,子类继承父类的方法如果被重写,那么父类的这个方法在子类里面就不存在了,只存在被重写后的方法,那么如果我们想在子类里面调用父类未被重写的方法的话,怎么办?方法就是使用作用域,即:

zilei::show()  //这个就是在子类方法中调用父类的被重写的原方法
{
     cout << fulei::show();
}

当然,如果这个方法没有被重写,那么这个方法就会被原封不动的继承到子类中,所以可以在子类中直接使用这个方法,,不用在使用作用域运算符。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值