请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

C++ 基础语法 快速复习笔记(3)---重载函数,多态

[复制链接]
查看: 40|回复: 0

8157

主题

8157

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
24481
发表于 2019-12-2 11:43 | 显示全部楼层 |阅读模式
1.重载运算符和重载函数:

C++ 答应在同一感化域中的某个函数和运算符指定多个界说,别离称为函数重载和运算符重载。
重载声明是指一个与之前已经在该感化域内声明过的函数或方式具有类似称号的声明,可是它们的参数列表和界说(实现)不类似。
当您挪用一个重载函数或重载运算符时,编译器经过把您所利用的参数典范与界说中的参数典范举行比力,决议选用最合适的界说。
挑选最合适的重载函数或重载运算符的进程,称为重载决议。

a.函数重载:

在同一个感化域内,可以声明几个功用类似的同名函数,可是这些同名函数的形式参数(指参数的个数、典范大要顺序)必须差别。您不能仅经过返回典范的差别来重载函数。

b.运算符重载:

您可以重界说或重载大部分 C++ 内置的运算符。这样,您就能利用自界说典范的运算符。
重载的运算符是带有特别称号的函数,函数名是由关键字 operator 和后来要重载的运算符标记组成的。与其他函数一样,重载运算符有一个返回典范和一个参数列表。

具编制子:https://www.runoob.com/cplusplus/cpp-overloading.html



2.多态:

多态按字面的意义就是多种形状。当类之间存在条理结构,而且类之间是经过继续关联时,就会用到多态。
C++ 多态意味着挪用成员函数时,会按照挪用函数的工具的典范来实行差别的函数。

例子:https://www.runoob.com/cplusplus/cpp-polymorphism.html

翰墨版表白:
假定我们有个基类叫shape,成员函数area,而其两个子类的成员函数也有area(同名)。
假如你想挪用两个子类的函数area时候会发现步伐仍然会挪用shape(父类)的area函数。
致使毛病输出的原因原由是,挪用函数 area() 被编译器设备为基类中的版本,这就是所谓的静态多态,或静态链接 - 函数挪用在步伐实行前就预备好了。偶然间这也被称为早绑定,由于 area() 函数在步伐编译时代就已经设备好了。

治理法子就是 基类 的area函数声明改成  
virtual int area(){
}
此时,编译器看的是指针的内容,而不是它的典范。是以,由于 tri 和 rec 类的工具的地址存储在 *shape 中,所以会挪用各自的 area() 函数。
正如您所看到的,每个子类都有一个函数 area() 的自力实现。这就是多态的一样平常利用方式。有了多态,您可以有多个差别的类,都带有同一个称号但具有差别实现的函数,函数的参数甚至可所以类似的。
这套治理计划叫做 :

虚函数 :

是在基类中利用关键字 virtual 声明的函数。在派生类中重新界说基类中界说的虚函数时,会告诉编译器不要静态链接到该函数。
我们想要的是在步伐中尽情点可以按照所挪用的工具典范来挑选挪用的函数,这类操纵被称为静态链接,或前期绑定。


纯虚函数:

您能够想要在基类中界说虚函数,以便在派生类中重新界说该函数更好地适用于工具,可是您在基类中又不能对虚函数给出故意义的实现,这个时候就会用到纯虚函数。

virtual int area() = 0;

纯虚函数必定没有界说,纯虚函数用来标准派生类的行为,即接口。包括纯虚函数的类是笼统类,笼统类不能界说实例,但可以声明指向实现该笼统类的具体类的指针或援用。



C++中, 虚函数可以为private, 而且可以被子类覆盖(由于虚函数表的转达),但子类不能挪用父类的private虚函数。虚函数的重载性和它声明的权限无关。
一个成员函数被界说为private属性,标志取其只能被当前类的其他成员函数(或友元函数)所拜候。而virtual修饰符则夸大父类的成员函数可以在子类中被重写,由于重写之时并没有与父类发生任何的挪用关系,故而重写是被答应的。
编译器不检查虚函数的各类属性。被virtual修饰的成员函数,不论他们是private、protect或是public的,城市被同一的放置到虚函数表中。对父类举行派生时,子类会继续到具有类似偏移地址的虚函数表(类似偏移地址指,各虚函数相对于VPTR指针的偏移),则子类就会被答应对这些虚函数举行重载。且重载时可以给重载函数界说新的属性,例如public,其只标志取该重载函数在该子类中的拜候属性为public,和父类的private属性没有任何关系!
纯虚函数可以筹划成私有的,不外这样不答应在本类之外的非友元函数中间接挪用它,子类中只要覆盖这类纯虚函数的使命,却没有挪用它的权利。

援用:https://www.runoob.com/cplusplus/cpp-polymorphism.html

免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 淄博新闻网-淄博日报 淄博晚报 淄博财经新报 掌中淄博 淄博专业新闻资讯发布网站 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表