多态与虚继承

本文探讨了C++中的多态性,主要通过动态联编实现,特别是虚函数的作用。虚函数使得通过基类指针或引用来调用派生类的同名函数成为可能,解决了函数调用问题。同时,介绍了虚函数的声明和继承,以及覆盖与重载的区别。此外,文章还讨论了虚函数的一些限制,如静态成员函数、构造函数和内联函数不能为虚函数,以及析构函数通常应声明为虚函数的情况。最后,简述了虚拟继承的概念,包括构造函数的调用顺序和虚拟基类的特性。
摘要由CSDN通过智能技术生成

多态性是指具有不同功能的函数可以用同一个函数名,这样就可以用一个函数调用不同内容的函数。多态主要通过联编实现。
静态联编:在编译时一定确定要调用哪个函数。
动态联编:一个类如果有虚函数,它的对象有个指针,指向虚函数表,通过指针调用里面的虚函数。
虚函数表8个字节。
在类的继承的不同层次中,在不同的层次中可以出现名字、参数个数和类型相同而功能不同的函数。编译器按照向自己后父类的顺序进行覆盖查找,如果子类有与父类相同原形的成员函数,要想调用父类的成员函数,需要对父类重新引用调用。虚函数则可以解决子类和父类相同原型成员函数的函数调用问题。虚函数允许在派生类中重新定义域基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类的同名函数。
在基类中用virtual声明成员函数为虚函数,在派生类中重新定义此函数,改变此函数的功能。在C++语言中虚函数可以继承,当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数。但如果派生类没有覆盖基类的虚函数,则调用时调用基类的函数定义。
覆盖和重载的区别是:重载是同一层次函数名相同,覆盖是在继承层次中成员函数的函数原型完全相同。
根据联编的时刻不同,存在两种类型的多态性。及函数重载和虚函数。

利用虚函数实现多态

多态主要体现在虚函数上,只要虚函数存在,对象类型就会在程序运行时动态绑定。动态绑定的实现方法就是定义一个指向基类对象的指针变量,并使它指向同一类族中函数中需要调用该函数的对象,通过该指针变量调用此虚函数。

基类和子类的对象如何实现调用各自类的函数。通过虚函数实现。
传值得时候

是否可以为虚函数的情况

1.只有类的成员函数才能声明为虚函数。
2.静态成员函数不能是虚函数。
3.内联函数不能是虚函数。
4.构造函数不能是虚函数
5.析构函数一般声明为虚函数。为了调用各自的析构函数。销毁子类的对象会先调用基类的析构函数,在调用子类的析构函数。
6.重载:函数参数不同,不可设为虚函数。
7.覆盖:函数参数,返回值相同,可以设为虚函数。
8.返回值例外:
函数参数相同:但是返回值是当前对象的指针或引用时,也可以设置为虚函数。

这里写图片描述

#include<iostream>
#include<string.h>
#include<unistd.h>
using namespace std;
class Human{
    public:
    virtual void e
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值