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是一个代理,你对代理进行操作,他 ...
随机推荐
- 基于gmap.net制作离线地图下载器
网上已有大量文章介绍gamp.net和离线下载相关的文章了.我就不在介绍gmap相关的文章了,这里着重介绍一下下载相关原理.其实gmap.net本身已自带下载工能,只是离线图片下载到sqlit中,现将 ...
- 解决Macbook网络连接成功但是图标一直显示正在查找网络问题
看图,一直显示正在连接网络..明明连接上去了,解决办法,打开网络偏好设置 新建位置 然后点击应用就搞定了 图标正常了
- iOS isa指针
在Objective-C中,任何类的定义都是对象.类和类的实例没有任何本质上的区别.任何对象都有isa指针. isa:是一个Class 类型的指针. 每个实例对象有个isa的指针,它指向对象的类,而C ...
- python 垃圾回收机制的思考
一.前言 Python 是一门高级语言,使用起来类似于自然语言,开发的时候自然十分方便快捷,原因是Python在背后为我们默默做了很多事情,其中一件就是垃圾回收,来解决内存管理,内存泄漏的问题. 内存 ...
- Acm弱校奋斗史
我也是来自弱校的,没有教练,甚至老师都不理我们这种Acmer.看完这篇文章感触颇深. 原文链接 http://acmicpc.info/archives/369 原文 题解:还记得2年前的一个晚上,我 ...
- python高阶函数式编程
from functools import reduce def str2int(s): def fn(x, y): return x * 10 + y def char2num(s): return ...
- Frequent Pattern (FP Growth算法)
FP树构造 FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法的代价,他不需要不断得生成候选项目队列和不断得扫描整个数据库进行比对.为了达 到这样的效果,它采用了一种简洁的数据 ...
- Docker系统五:Docker仓库
创建Docker Hub账户 登录和上传镜像到Hub.docker.com docker login //登陆hub.docker.com docker tag ubutun1404-baseimag ...
- Redis实现数据库读写分离
Redis简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作 ...
- 深度学习篇——Tensorflow-GPU配置
tensoflow-gpu安装 对于python 3.5和3.6的童鞋们而言,安装tensorflow其实并不难,因为我们可以通过pip直接安装. 不过,第一要求你安装的python是64位的,如下图 ...