运算符重载

运算符是针对新类型数据的实际需要,对原有运算符进行适当的改造

1.比如使复数类的对象可以使用+运算符实现加法;

2.比如使时钟类的对象可以用++运算符实现时间增加1秒;

注意:可以重载为类的非静态成员函数、非成员函数

重载为类成员的运算符函数定义形式:
函数类型 operator 运算符(形参)

{

  ...

}

//参数个数=原操作数个数减1,(后置++,--除外)

如何重载运算符为非成员函数?

有些运算符不能重载为成员函数,例如二元运算符的左操作数不是对象,或者不能由我们重载运算符的对象;

备注:如果在重载运算符函数中要操作某类对象的私有成员,可以将此函数声明为该类的友元;

后置单目运算符的重载函数,形参列表中要增加一个int,但不必写形参名:
例如:

表达式 oprd B

等同于operator B(oprd,0)

虚函数:

通过虚函数实现运行时多态性,实现动态绑定;

虚函数必须是非静态的成员函数(属于对象的,而不是类的),虚函数经过派生后就可以实现运行过程中的多态;

注释:

一般的成员函数可以是虚函数;

构造函数不能是虚函数;

析构函数可以是虚函数;

虚函数一般不声明为内联函数,因为内联函数的处理是静态的;

虚析构函数

可能通过基类指针删除派生类的对象;如果需要通过基类指针调用对象的析构函数,就需要让基类的析构函数成为虚函数;

虚表与动态绑定

虚表

每个多态类都有一个虚表(virtual table)

虚表中有当前类的各个虚函数的入口地址

每个对象有一个指向当前类的虚表的指针(虚指针vptr)

动态绑定的实现

构造函数中为对象的虚指针赋值

通过多态类型的指针或者引用调用成员函数时,通过虚指针找到虚表,进而找到所调用的虚函数的入口地址;

通过该入口地址调用虚函数;

抽象类

纯虚函数的定义格式:
virtual 函数类型 函数名(参数表) = 0;

带有纯虚函数的类称为抽象类;

抽象类的作用:
抽象类为抽象和设计的目的而声明;

将有关的数据和行为组织在一个继承层次结构中,保证派生类具有要求的行为;

对于暂时无法实现的函数,可以声明为纯虚函数,留给派生类去实现;

C++11:override 与final

override

  • 多态行为的基础:基类声明虚函数,继承类声明一个函数覆盖该虚函数
  • 覆盖要求: 函数签名(signatture)完全一致
  • 函数签名包括:函数名 参数列表 const

C++11引入显示函数覆盖,在编译期而非运行期捕获此类错误;在虚函数显示重载中运用,编译器会检查基类是否存在一虚函数,与派生类中带有声明override的虚函数,有相同的签名,若不存在则会报错;

final

C++11中提供的final,用来避免类被继承,或是基类的函数被改写;

最新文章

  1. Jumony Core 3,真正的HTML引擎,正式版发布
  2. 【C++】DDX_Control、SubclassWindow和SubclassDlgItem的区别
  3. C++中的多态与虚函数的内部实现
  4. Guava 9-I/O
  5. @Register指令
  6. 线性模型(2):Linear Regression
  7. Mac OS X 10.10 Yosemite PHP 5.5.14 free type support fix
  8. WebStorm JavaScript 开发神器
  9. DEDE使用AJAX无刷新提交Form表单,PHP返回结果
  10. Spring Resource之内置的Resource实现
  11. jquery实现调用webservice
  12. linux deepin 12.12.1和Windows 7双系统修改默认启动项
  13. vue百度地图插件
  14. mybatis源码分析(五)------------SQL的执行过程
  15. java之微信支付通知
  16. PHP URL安全的Base64位编码
  17. linux 系统全盘恢复
  18. Win10恢复账户默认半透明头像
  19. WPF应用Access数据库
  20. react添加方法的两种形式

热门文章

  1. python爬虫快递查询系统(源码)
  2. pycharm安装mysql驱动包
  3. excel vba获取拼音
  4. PAT Basic 1073. 多选题常见计分法
  5. Linux网络编程目录
  6. Tomcat延迟启动
  7. 通过安装memadmin对memcache进行可视化管理
  8. Can't connect to X11 window server using 的问题,求解
  9. C#学习-索引器
  10. Git坑换行符自动转换 [转载]