多态

整理

牧云@^-^@ 提交于 2019-11-30 19:52:48
C++11 知识整理 对class的理解 答:首先,class 也是一种数据类型,只不过是可以由开发者自由定义的一种数据类型;可以用来封装成员变量和成员函数;支持抽象,继承,多态性;在定义数据类型的时候,private,public,也从一定程度上保证了数据的安全性 抽象性:含有纯虚函数的类被称为抽象类,用途是为派生类提供基类 多态性:对于不同对象接受相同信息时产生不同的动作。分为静态多态和动态多态,体现在两个方面,一是在编译的时候,函数重载是一个方面;二是在运行的时候,虚函数是一个方面 继承性:子类具有父类的各种属性和方法,而不必再次编写相同的代码 什么是类 答:一种将抽象转换成用于定义的类型的工具,将数据表示方法和操纵这些数据的方法组合一起整合成一个包 如何将私有成员变量取出 答:方法1:通过public中的函数,传出参数将私有成员变量取出。方法2:友元函数 *this 指针 答:经典回答,进入一个房间,能看见房间里的东西,但是整个房间看不到了,然后this指针就是时刻盯着这整个房间。this指针是类的一个自动生成,自动隐藏的私有成员。存在于类的非静态成员函数中,指向内调用函数所在的对象。全局仅有一个this指针,当一个对象被创建的时候,this指针就存放指向对象数据的首地址 类和对象的区别和联系 答:区别:(1).定义不同 ,类是现实世界或思维世界的实体在计算机的反映

装箱 拆箱 枚举 注解 多态

◇◆丶佛笑我妖孽 提交于 2019-11-30 19:48:00
装箱 拆箱的作用就是为了引用类型和基本数据类型的转化,装箱就是把基本数据类型转换成引用类型。拆箱则是将引用数据类型转换成基本数据类型 装箱 :就是简而言之包装类型,将基本数据类型转换成引用数据类型。 拆箱: 就是简而言之将引用类型转换成基本数据类型。 枚举:枚举主要就是声明一些列的常量,比如星期一,星期二,星期三等等,,,这些是常量不变的,那么做case的时候就可以选择这些枚举的变量名,从而实现代码精简 注解:注解的作用就是将一系列的类封装之后采用‘@’符号进行表示实现这个注解可以在对用的类,变量进行一系列的操作。 多态:多态讲解的是向上转型或者向下转型,最常见就是重写重载的多态,重载是在编译的时候体现多态,而重写是在运行时候的时候体现多态。 语文不好,莫喷。。。。。。。。 来源: https://www.cnblogs.com/baibin-520/p/11638023.html

python中的多态

╄→гoц情女王★ 提交于 2019-11-30 18:41:13
所谓多态:定义时的类型和运行时的类型不一样,此时就成为多态 ,多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚“鸭子类型”。 鸭子类型:虽然我想要一只"鸭子",但是你给了我一只鸟。 但是只要这只鸟走路像鸭子,叫起来像鸭子,游泳也像鸭子,我就认为这是鸭子。 Python的多态,就是弱化类型,重点在于对象参数是否有指定的属性和方法,如果有就认定合适,而不关心对象的类型是否正确。 [Python] 纯文本查看 复制代码 ? 1 [ / align][align = left] class MiniOS( object ): [ / align][align = left] """MiniOS 操作系统类 """ [ / align][align = left] def __init__( self , name): [ / align][align = left] self .name = name [ / align][align = left] self .apps = [] # 安装的应用程序名称列表 [/align][align=left] def __str__(self): [/align][align=left] return "%s 安装的软件列表为 %s" % (self.name, str(self.apps)) [/align][align

static_cast与dynamic_cast转换

时间秒杀一切 提交于 2019-11-30 17:14:22
一 C 语言中存在着两种类型转换: 隐式转换和显式转换 隐式转换:不同数据类型之间赋值和运算,函数调用传递参数……编译器完成 char ch; int i = ch; 显示转换:在类型前增加 :(Type)变量 对变量进行的转换。用户显式增加 char *pc = ( char *)pb; void *ps = ( void *)pa; 二 C++ 中的类型转换   通过这两种方式,C语言中大部分的类型转换都可以顺利进行。 至于能不能进行转换,转换后的结果如何,编译器不管需要用户自己去控制。   C++继承了C中的隐式和显式转换的方式。但这种转换并不是安全和严格的, 加上C++本身对象模型的复杂性,C++增加了四个显示转换的关键字。(C++是强类型语言) ( static_cast , dynamic_cast , const_static , reinterpret_cast ) 1 static_cast (1 )用于基本的数据类型转换(char ,int ),及指针之间的转换 test_enum type = test_enum_1; char a ; int b = static_cast < int >(a); char c = static_cast < char >(b); type = static_cast <test_enum>(b); char * pa =

【C++】虚函数的实现机制

落花浮王杯 提交于 2019-11-30 16:15:38
一.什么是虚函数 ? 虚函数是在类中由virtual关键字声明的成员函数,并且每一个含有虚函数的类都至少有一个与之对应的虚函数表,其中存放着该类所有虚函数对应的函数指针 在基类中进行如下定义: virtual void show() //由于有virtual修饰所以是虚函数 void show()//虽然和前面声明的show虚函数同名,但不是虚函数 B的虚函数表中存放着B::foo和B::bar两个函数指针。 D的虚函数表中存放的既有 继承 自B的虚函数B::foo,又有 重写 (override)了基类虚函数B::bar的D::bar,还有 新增 的虚函数D::quz。 所有虚函数地址都会存放在所属类的虚函数表vtbl中,另外在基类中声明为虚函数的成员方法,达到子类是仍然是虚函数,即使子类中重新定义基类虚函数时未使用virtual修饰,该函数地址仍会放在子类的虚函数表vtbl中 二.虚函数表是如何构造和继承的? 1)基类虚函数表的构造: 首先在基类声明中找到所有虚函数,按照其声明顺序编码,然后按照此声明顺序为基类创建一个虚函数表,其内容就是指向这些虚函数的函数指针,按照虚函数声明的顺序将这些虚函数的地址填入虚函数表中,例如若show放在虚函数声明的第二位,则在虚函数表中也放第二位 2)子类虚函数表的构建和继承: 首先将基类的虚函数表复制到该子类的虚函数表指针中

001 C++思想

给你一囗甜甜゛ 提交于 2019-11-30 15:18:35
c++思想: 封装、继承、多态 封装: 类思想 - 数据 + 操作 继承: 类扩展 多态: 接口重用 面向对象特征 1 封装 2 继承 (1) 继承(泛化): 实现继承、可视继承 (2) 组合(聚合): 接口继承、纯虚类 3 多态 (1) 覆盖: 虚函数、接口 (2) 重载: 同名函数 https://blog.csdn.net/ruyue_ruyue/article/details/8211809 来源: https://www.cnblogs.com/huafan/p/11601225.html

C++虚函数表和对象存储

天大地大妈咪最大 提交于 2019-11-30 13:33:30
C++虚函数表和对象存储 C++中的虚函数实现了多态的机制,也就是 用父类型指针指向其子类的实例 ,然后通过父类的指针调用实际子类的成员函数,这种技术可以让父类的指针有“多种形态”,这也是一种泛型技术,也就是 使用不变的代码来实现可变的算法 本文不再阐述虚函数的使用方法,而是从虚函数的实现机制上做一个清晰的剖析 参考博文: https://blog.csdn.net/u012879957/article/details/81027287 想了解实现机制,就必须先了解对象的存储方式 对象数据和函数的存储方式 我们知道,用类去定义对象,系统会为每一个对象分配存储空间 在你的印象中类的存储可能是下图这样的: 上图表示要分别为对象的数据和函数的代码分配存储空间,这样肯定是不行的,内存利用率太低了,所以C++编译系统采用的是以下的方法: 每个对象占用存储空间的只是该对象的数据部分(虚函数指针和虚基类指针也属于数据部分),函数代码属于公用部分 我们常说的“A对象的成员函数”,是从逻辑的角度而言的,而成员函数的物理存储方式其实不是如此 C++内存分区 C++的内存分区大概分成五个部分: 栈(stack):是由编译器在需要时自动分配,不需要时自动清除的变量存储区,通常存放局部变量、函数参数等。 堆(heap):是由 new 分配的内存块,由程序员释放(编译器不管),一般一个 new 与一个

Java金典面试题(23-43)

偶尔善良 提交于 2019-11-30 13:15:25
道歉声明:非常感谢大家的评论,你们的评论提的建议我会一一改正,希望大家能见证我的成长,也希望你们有一个写博客的好习惯,写了博客的朋友可以给我留言,我会去关注你们的 24,Java实现多态的原因?? ** Java实现多态的主要原因是依靠父类或接口的引用指向子类对象,从而实现了一个对象指向多种状态的特征 拓展:多态分为编译时多态和运行时多态 编译时多态(大白话,希望你们理解):编译时多态指的是方法的重载 运行时多态:通过 动态绑定 寻找匹配的方法执行,如果当前类中没有匹配 的方法,则沿着继承关系逐层向上,依次在父类或各祖先类中寻找匹配方法,直到Object类 ** 25,HashMap和Hashtable的区别??? ** 区别: (1)线程安全不同,HashMap是线程不安全的,Hashtable是线程安全的 (2)底层初始容量不同,HashMap初始容量为16,Hashtable初始容量为11 拓展:面试官会问:HashMap适合在多线程的情况下使用吗? 不会使用,HashMap和Hashtable都不会在多线程中使用,一般会使用最好使用concurrentHashmap ** 26,简述一下J2ee的设计模式 ** 1, 设计模式一般分为三大类:创建模式,结构模式,行为模式(很重要,如果面试官问你设计模式的话,先说这三种类型)   (1)创建模式:创建模式抽象了实例化过程

8.1 接口,接口也是一种类型

你说的曾经没有我的故事 提交于 2019-11-30 12:27:44
package mainimport ( "errors" "fmt")/* 接口:接口指定了一个方法集,这是实现模块化的强大方式。可以将接口视为方法集的蓝本,它描述了方法集中的所有方法,但没有实现他们。 接口多种方式的实现,就想多态。多态就是多种形式,它让接口能够有多种实现。 接口声明方式: type ... interface{ 多个签名(也就是函数名)} 接口的要求:只要实现了它指定的方法集,且函数签名正确无误就可以了。 接口也是一种类型,可作为参数传递给函数,因此可编写可中用于多个接口实现的函数。 比如:定义一个数据库接口,只要实现了满足接口的要求,就可以使用任何数据库,因此可以轻松地更换数据库。 数据库接口可以包含多个实现,这就引入了多态的概念 多态意味着多种形式,它让接口能够有多种实现。 比如下例子中的:接口机器人,有个开关方法PowerOn(), 下面结构体都是实现了这个机器人的方法。 理解成: 接口定义了方法, 下面方法指向某个结构体,函数名就是接口的签名,那么这个结构体就实现了这个接口,属于这个接口多态中的一种。*/type Robot interface{ PowerOn() error //这个PowerOn叫做Robot的签名,一个签名就是一个定义的函数}type T850 struct{ Name string}func(a *T850)PowerOn(

嵌入式C++测试题

早过忘川 提交于 2019-11-30 10:30:18
仅供学习,为嵌入式帝国做亿分之一的贡献吧,临近国庆,祝大家国庆节快乐哦 答案仅供参考吧 一、 选择题(共 80 分, 每题 2 分 ) ( 1 ) A ( 2 ) C ( 3 ) C ( 4 ) B ( 5 ) D ( 6 ) C ( 7 ) C ( 8 ) D ( 9 ) A ( 10 ) C ( 11 ) A (12) B (13) D (14) B (15) A ( 16 ) A ( 17 ) C ( 18 ) D ( 19 ) D ( 20 ) C ( 21 ) C ( 22 ) D ( 23 ) D ( 24 ) D ( 25 ) A ( 26 ) C (27) C (28) C (29) B (30) B ( 31 ) A ( 32 ) D ( 33 ) D ( 34 ) B ( 35 ) A ( 36 ) A ( 37 ) B ( 38 ) B ( 39 ) C ( 40 ) C 二、 填空题(每空 1 分, 共 20 分) 1. 构造函数 2. friend 保护和私有成员 3. 先基类在派生类 4. 单一继承 5. virtual 6. 静态多态性 动态多态性 7. 抽象类 8. 测试是否文件尾 9. 成员函数 10. try throw catch 11. 代码复用和泛型程序设计 12. 类的友元函数 13. 抛出异常 捕捉异常 14. template 15.