C++中多态的类型及虚函数

面向对象的多态性分为4类:

  • 重载多态
    函数重载
    运算符重载
  • 包含多态(类族中定义于不同类中的同名函数的多态行为)——主要是采用虚函数实现
  • 参数多态:与类模板相关联,在使用时必须赋予实际的类型才可以实例化
  • 强制多态:是指将一个变量的类型加以变化,以符合函数或操作的要求。如浮点数和整数相加时会将整数变为浮点数再相加。

多态从实现的角度来讲可以划分为两类:
绑定:确定操作所针对的具体对象

  • 编译时的多态(在编译阶段完成绑定——静态绑定)
  • 运行时的多态(在运行阶段完成绑定——动态绑定)
    虚函数是动态绑定的基础,虚函数必须是非静态的成员函数 。

虚函数
虚函数的声明必须只能在类定义中的函数原型声明中,不能再实现时声明为虚函数。如:virtual void display() const;

派生类覆盖基类的成员函数时,既可以使用virtual关键字,也可以不使用。
若派生类没有给出显式的虚函数声明,会根据以下规则判断派生类的函数是否是虚函数:

  • 函数名称是否相同
  • 参数个数及参数类型是否相同
  • 返回值是否相同

Note:
1、构造函数不能是虚函数,但是析构函数可以是虚函数。
2、只有通过基类的指针或引用调用虚函数时,才会发生动态绑定。因为基类的指针可以指向派生类的对象,基类的引用可以作为派生类对象的别名,但是基类的对象却不能表示派生类的对象。(赋值兼容原则)

赋值兼容原则:

  • 派生类的对象可以赋值给基类对象
  • 派生类的对象可以初始化基类的引用
  • 派生类对象的地址可以赋给指向基类的指针。也就是说,指向基类对象的指针变量也可以指向派生类对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值