C++学习-10
- 类型转换:自动转换,显示转换,强转
总结:CPP编译的时候,从上往下,遇到不匹配,声明扩展了一个类的作用域(此时最多只能创建类的指针或者引用), 由于没有定义是不可能使用到类的成员
完成类型转换的时候,一般两个类的转换,两个接口都放在下面的那个类里面实现
- 手动类型转换:构造函数类型转换,赋值重载,operator XXXX()
- 构造函数类型转换:给一部分的数据,内部可以自己调节,那么这部分的数据就可以成为往该类转换(外->内)
- 赋值重载:跟构造函数一个原理,阶段是在赋值的时候,而不是初始化的时候(外->内)
- operator XXXX() 接口要求:不能有返回值,参数必须为空,函数名为要转换的类型名
函数内部要求必须有返回值(内->外)
首先就得创建这种类型的对象毕竟要返回这种类型的对象
只能是成员函数,拥有this,因为必须操作成员数据(重载类型)返回的时候一定是与类型名相同的那个类型
补充:流运算符的重载:friend ostream& operator <<(ostream & os, const yourclass & yu10);
并不是成员,和类是完全隔离的,属于:友元重载
- 释放的时候是从下往上,构造函数不可以互相包含,造成死锁
头文件互相包含,互相引用对象,引用还有指针的时候可以编译但是不能执行
- 引用外部函数需要声明。。
类的声明只能定义类的指针或者引用,类的头文件之后(相当于定义了)(因为头文件整个的函数体系已经出来了,)
3.多继承功能迭代多,但是牵连很多,难维护
继承会把爹的所有元素都继承过来
继承的本质:子类直接把整个父类包含进去,多继承也不例外,重复的包都没有问题
真正的核心在于:运用了类似命名空间的走法来区分层次上的关系
比如想使用父类的成员,子类也有, B.A::n;使用命名空间的走法来区分层次上的结构
继承之后,按照源代码块整体的提取过来,数据是分离的,这就很明显了嘛
- 静态函数和成员函数本质的区别:不需要this指针,不依赖于一个对象
- 静态私有成员得有接口set,get
5.对protected的理解:只能说类的设计者(子类的设计)在继承的关系中是可以访问的,但是类的调用者是不可访问的(在Main这个层次进行操作)
6.本类的设计者(private),继承链中的设计者(protected),Main那边的调用者(public)
7.继承链:构造的时候:从基类开始构造,析构的时候:从派生类到基类
在继承链中,各自的成员数据由各自的构造函数进行初始化
(现在可以发现:在继承链中派生类的构造函数必须提供接口提供给基类去初始化各自类的数据成员)递归式的调用初始化
继承链中,派生类是整体的把基类完全的收入囊中,派生类实体和基类实体之间的操作互不相干,框架上是继承链模式
8.虚继承正对于多继承而言,派生类继承的多个基类中含有重复的基类,此时产生的浪费内存,产生二义性。。。。。。
虚继承之后相同的基类只开辟一个内存块,所有的像指针那样指向同一片内存
虚基类:就是容易出现重合的类
9.虚函数提供一个接口
多态主要依赖于继承和virtual,主要用于软件的扩展,(说到底软件的扩展就是依赖于接口的提供,然后把新的功能放进去)由于多态只能小接口的指针所以对于多功能就体现在virtual这个虚函数上面,利用虚函数实现多个不同的功能再用动态绑定就可以了
10异构结构:每个成员都是基类的指针,然后分别指向不同的在堆上开辟的派生类对象,实现了一个数据结构上的动态绑定---------多态
基类指针基于多态与虚函数调用派生类的方法
C++学习-10的更多相关文章
- JavaScript学习10 JS数据类型、强制类型转换和对象属性
JavaScript学习10 JS数据类型.强制类型转换和对象属性 JavaScript数据类型 JavaScript中有五种原始数据类型:Undefined.Null.Boolean.Number以 ...
- ThinkPhp学习10
原文:ThinkPhp学习10 查询操作 Action模块 User下的search public function search(){ //判断username是否已经传入,且不为空 if(isse ...
- python学习10—迭代器、三元表达式与生成器
python学习10—迭代器.三元表达式与生成器 1. 迭代器协议 定义:对象必须提供一个next方法,执行该方法或者返回迭代中的下一项,或者返回一个StopIteration异常,以终止迭代(只能往 ...
- ElasticSearch 5学习(10)——结构化查询(包括新特性)
之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...
- OC学习10——内存管理
1.对于面向对象的语言,程序需要不断地创建对象.这些对象都是保存在堆内存中,而我们的指针变量中保存的是这些对象在堆内存中的地址,当该对象使用结束之后,指针变量指向其他对象或者指向nil时,这个对象将称 ...
- Win32汇编学习(10):对话框(1)
现在我们开始学习一些有关GUI编程的有趣的部分:以对话框为主要界面的应用程序. 理论: 如果您仔细关注过前一个程序就会发现:您无法按TAB键从一个子窗口控件跳到另一个子窗口控件,要想转移的话只有 用鼠 ...
- 【Spark深入学习 -10】基于spark构建企业级流处理系统
----本节内容------- 1.流式处理系统背景 1.1 技术背景 1.2 Spark技术很火 2.流式处理技术介绍 2.1流式处理技术概念 2.2流式处理应用场景 2.3流式处理系统分类 3.流 ...
- 【转】Java学习---10个测试框架介绍
[原文]https://www.toutiao.com/i6594302925458113027/ JAVA 程序员需要用到 10 个测试框架和库 Java 程序员需要用到十大单元测试和自动化集成测试 ...
- WPF学习10:基于MVVM Light 制作图形编辑工具(1)
图形编辑器的功能如下图所示: 除了MVVM Light 框架是一个新东西之外,本文所涉及内容之前的WPF学习0-9基本都有相关介绍. 本节中,将搭建编辑器的界面,搭建MVVM Light 框架的使用环 ...
- spark学习(10)-RDD的介绍和常用算子
RDD(弹性分布式数据集,里面并不存储真正要计算的数据,你对RDD的操作,他会在Driver端转换成Task,下发到Executor计算分散在多台集群上的数据) RDD是一个代理,你对代理进行操作,他 ...
随机推荐
- pro asp.net mvc 5笔记
1.Ninject条件绑定方法When(predicate)WhenClassHas<T>()WhenInj ectedInto<T>()例: kernel.Bind<I ...
- Sping Boot入门到实战之入门篇(一):Spring Boot简介
该篇为Spring Boot入门到实战系列入门篇的第一篇.对Spring Boot做一个大致的介绍. 传统的基于Spring的Java Web应用,需要配置web.xml, applicationCo ...
- RegexKitLite编译报错
报错如下: Undefined symbols for architecture i386: "_uregex_open", referenced from: _rkl_getC ...
- Eventlog控件的使用
CreateEventSource 已重载. 建立一个能够将事件信息写入到系统的特定日志中的应用程序. Delete 已重载. 移除日志资源. DeleteEventSource 已重载. 从事件日志 ...
- Nashorn——在JDK 8中融合Java与JavaScript之力
从JDK 6开始,Java就已经捆绑了JavaScript引擎,该引擎基于Mozilla的Rhino.该特性允许开发人员将JavaScript代码嵌入到Java中,甚至从嵌入的JavaScript ...
- 【前端】Vue和Vux开发WebApp日志二、优化gulp任务
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/vue_vux_2.html 项目github地址:https://github.com/shamoyuu/vue- ...
- document.forms[].submit()
document.forms['exportServlet'].submit(); (1)document.forms:表示获取当前页面的所有表单 (2)document.forms[0]:表示获取当 ...
- Hello China操作系统在Virtual PC上的安装和使用
http://blog.csdn.net/hellochina15/article/details/7253350 本文介绍如何在Windows 7操作系统和Virtual PC 2007虚拟机上安装 ...
- RAPIDIO高速串行协议
RapidIO是由Motorola和Mercury等公司率先倡导的一种高性能. 低引脚数. 基于数据包交换的互连体系结构,是为满足和未来高性能嵌入式系统需求而设计的一种开放式互连技术标准.RapidI ...
- Qt5.6.0+OpenGL 纹理贴图首战告捷
重要的话写在前面~~通过今晚的实验,知道了EBO是不能随便release的~~~一直不要release就可以了,否则vao会失效 Display.h #ifndef DISPLAYWIDGET_H # ...