C++备考(七)多态性

学习没有捷径,但考试有捷径

临近考试,虽然之前对一些概念搞清楚了,但时日一长,很多又模糊了。因此利用整理成章,将知识重拾。
考试的范围如下:

  1. 常量(const、符号、字符串常量、立即数)
  2. 引用和指针
  3. 类的封装和隐藏(静态成员、友元函数)
  4. 类的初始化(初始化方式和顺序)
  5. 类的继承(继承方式、构函列表、多继承)
  6. 类的多态性(函数重载、运算符重载、虚函数、虚函数表)
  7. 类的作用域概念

多态性

  • 运算符重载
  • 函数名重载
  • 虚函数

运算符重载

规则
  1. 不可创造新的运算符
  2. 不可修改基本数据类型的运算符操作
  3. 不可重载的运算符
    * :: . ? :
一个疑惑

实现极坐标形式复数的表示时,疑惑:
如何重载乘法符号*

答案:可以重载,仅*做为取内容运算符时不能重载

函数名重载

避免二义性问题

void fun(void);
void fun(int a = 6);

不可同时使用,最好使用参数默认方式

子类型

公有继承时,派生类是基类的子类型
派生类的对象可以做为基类的对象进行处理,需要基类对象的任何地方都可以使用公有派生类的对象来代替,可以使用相同的函数统一处理。

关系可以传递,但不可逆

可以将派生类赋值给基类

指针

一个指向基类的指针可以指向任何公有派生类的对象

虚函数

将基类函数(成员函数,除构造函数)指定为虚函数

virtual void printStandard();

则派生类可对其进行重新定义,若不修改则沿用基类函数
必须完全一致

函数形参为基类引用或指针,实参传入派生类对象,若调用函数为虚函数则可调用派生类对应的函数。
但仅在派生类中重新定义只能调用基类函数。

  • 派生类中重定义结果
  • 派生类对象访问派生类函数,基类对象访问基类函数,不会重载
  • 派生类函数调用基类同名函数加基类作用域
虚函数表(virtual function table)
  • 每个虚函数的类有一个虚函数表
  • 虚函数表包括此类调用的函数指针
  • 每个对象含指针指向对应的虚函数表
  • 调用虚函数时,通过对象的指针找到对应调用函数

纯虚函数

基类需要靠派生类提供各个具体实现版本
基类为抽象类,可传递

virtual void printStandard()=0

可以在声明为虚函数的同时,提供实现版本
不得声明纯虚函数为内联函数

虚析构函数

  • 一个基类指定为虚析构函数,则继承的派生类都为虚析构函数
  • 当某层的虚析构函数执行后,自动调用直接基类的虚析构函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值