C++_多态

本文详细介绍了C++中的多态性,包括虚函数表、虚基类和动态联编的概念。通过示例代码阐述了如何实现和利用多态,并探讨了虚函数在父类和子类之间的调用机制。同时提到了纯虚函数的作用以及动态联编与静态联编的区别。
摘要由CSDN通过智能技术生成

0. 说明:

  • 函数调用的本质——通过函数名和参数调用

  • 对于类对象中函数的使用,由于对象的地址作为一个参数而传递进其内部的成员函数中,故而自带this指针

  • 父类指针可以指向子类对象,但是只能访问子类继承自父类的成员

  • 子类重写父类的虚函数,实际上是重写了父类中虚函数表中某个成员函数的地址

  • 如果父类存在虚函数,那么建议析构函数声明为虚析构

1. 多态:

(函数多态相当于函数重载)
实现方式: 在父类成员函数前加关键字 virtual
说明:

  • 在父类函数加关键字virtual后,父类指针可以调用子类重写函数,

  • (子类如果重写的只是父类的普通成员函数,那么父类指针只能调用父类成员函数)

2. 虚函数表

虚函数表示意图

  • 在父类函数加关键字virtual后,父类指针优先调用子类重写的虚函数

3. 虚基类

由于虚函数的目的是子类重写虚函数,因此父类中虚函数可以不实现
纯虚函数: 在虚函数后面写 =0

  eg: virtual void fun()=0;

说明:

  • 如果一个类中拥有纯虚函数,那么该类称为虚基类
  • 虚基类没法定义对象,但是可以定义指针或引用
  • 可以派生新的类
  • 子类实现纯虚函数才可以定义对象

4. 动态联编

静态联编:在运行之间就知道用什么函数运行
(调用速度比较快,但是不灵活)
动态联编: 调用的时候才知道使用哪个函数
(根据函数指针,找到函数进行调用,但是速度不快)

5.代码实例1

.h 文件

#pragma once
class shape
{
   
public:
 	shape();
 	~shape();
 	virtual float getSquare() = 0;
};
class circle :public shape
{
   
private:
 	float r
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值