1. 友元主要用于访问私有变量,友元函数跟所在位置的权限没有任何关系friend+函数声明

友元类通常设计为一种对数据操作或类之间传递消息的辅助类(注意一下顺序)

  1. Explicit就是要求严格的匹配,不允许转换适应,可以强转(最后的那一层一定至少披着同类型的外衣)
  2. 做类方面的重载的时候一定得考虑深浅拷贝的问题
  3. 流运算符的重载必须在类的外部
  4. 运算符重载:1.类的内部重载2.在类的外部重载(要配合friend)简称 友元重载

在每个类都重载了对应的操作之后,可以使用模板进行公共接口的创建

Template<class T>

Void show(T &t)

{ cout<<t<<endl;}

这样就把相同功能统一了接口

在类这个级别的重载运算符,其实就是把对基本数据的操作,整合提升为对类的操作

原则就是跟写函数的形式是一样的

6.在重载自增自减的时候,(int)搞一个填充位标识为后 重载是不改变优先级的

shortsafe  operator++(int) 先自增再引用(后自增的思路:创建一个临时对象记录当前状态,再自增原对象然后返回临时对象)

void operator++()先引用临时再自增原本 

对于运算符重载是不严格控制返回值或者参数的,          

7.赋值重载:主要用于类型转换,基本数据类型转换成类类型都是可以的

Void operator=(const myclass& my1)赋值重载(主要是下一阶段的赋值)

Myclass(const myclass&my1)拷贝构造(主要用于初始化阶段)

重载的精髓在于,你可以随心的控制接口的摆法,至于函数块的实现完全由你根据需求去实现

狭义的:只是用于类对象自己的拷贝和赋值

广义的而言:把参数换成对应的类型就可以生成对应的类型转换

说到底的总结:重载操作符还是重载构造函数:在面向过程向面向对象转换的这个阶段,由对基本数据类型的操作转换到对类类型对象的相关操作这个过程中,重载操作就是自定义许多的原子操作构成类操作

8.非指针深浅拷贝都一样,自己开辟了内存就得注意深浅拷贝

Myclass& operator=(const myclass& my1)赋值重载

返回类对象的时候,此时会调用拷贝构造函数,注意是否拷贝构造也重写了深拷贝

9.typeid(表达式).name()只会获取表达式的类型,但是不会对表达式进行计算

10,你在栈上创建一个对象,即使内部是用new创建的内存,在你返回对象的时候,对象还是无效的

参数都是引用,就不会调用拷贝构造(栈上创建的指针指向在堆上开辟的内存)

拷贝构造深拷贝,赋值重载深拷贝

对象在栈上有生命周期,拷贝栈上的对象,需要深拷贝

拷贝成员的返回值的深浅拷贝总结:

1.Void operator=(const myclass& my1)赋值重载(主要是下一阶段的赋值)

Myclass(const myclass&my1)拷贝构造(主要用于初始化阶段)

狭义的:只是用于类对象自己的拷贝和赋值

广义的而言:把参数换成对应的类型就可以生成对应的类型转换

2.赋值重载有返回值的时候(返回的直接是对象而不是引用或者指针),如果你在创建的对象是在栈上的话,此时返回的时候对象就会调用析构函数,(1).如果你的拷贝构造函数没有进行深拷贝重写,那么内存就会出错(此时指针指向的内容就已经释放掉了),(2)如果拷贝构造是深拷贝,那么流程就是:赋值重载->拷贝构造(当你在赋值重载有返回值的时候,你就得注意你的拷贝构造是否需要深拷贝)   (3)如果没有重载返回值的时候,你把析构函数的释放内存的那步给搞掉,那么程序还是可以继续运行。

3. 赋值重载有返回值的时候(指针或引用),是不会调用拷贝构造,但是你的对象必须是在堆上创建,只要是栈上创建的对象都会调用析构函数,一定会被销毁。一个被销毁的对象深浅拷贝都已经没有意义了。

4.在一个函数里面的一个对象实在栈上创建的,那么即使他的成员是在堆上开辟的那么只要函数块走完,析构函数就会完完整整的释放掉这段内存,(所以啊,看一个对象是否会在函数块结束的时候被销毁,就看这个对象创建的时候是在栈上还是在堆上,而不是看他的成员是否在堆上还是在栈上,因为成员的销毁与否,都由析构函数进行指挥)

11.内存四区:

成员函数,静态函数都在代码区,

全局对象,静态变量(只会初始化一次)在静态区

类的大小不算成员函数,静态成员

类中的非静态成员跟对象创建的位置相关

栈区,堆区

Myclass*p=new(指针)。。。。   什么区就跟指针的区相关

类中的const和类的成员数据一样

重载只要涉及到this指针的时候必须是成员函数=,[],(),->

重载的三种形式:

友元重载;涉及到私有或者保护变量

成员函数重载

一般函数重载:那么类一般都是公有成员

重点操作:

Strcpy()实现字符串的深拷贝

Strcat()实现字符串的拼接

宏观总结:在编译器会默认操作的如:delete[],运算符。。。。。这些已经嵌入到了编译器的底层,你需要做的懂是什么搞法,掌握套路即可

C++学习-9的更多相关文章

  1. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  2. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  3. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  4. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. Unity3d学习 制作地形

    这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...

  7. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  8. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

  9. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

  10. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

随机推荐

  1. C/C++调试分析工具

    一.静态分析工具 cppcheck cppcheck主要用于对C/C++源代码进行分析检查的一个开源工具,可以用来检测未使用的变量.越界访问.内存泄漏等问题. 使用方法 cppcheck --enab ...

  2. appium滑动操作(向上、向下、向左、向右)

    appium滑动操作(向上滑动.向下滑动.向左滑动.向右滑动) 测试app:今日头条apk 测试设备:夜游神模拟器 代码如下: 先用x.y获取当前的width和height def getSize() ...

  3. CentOS 挂载 cdrom, iso文件作为源

    在生产系统环境中的机器都没有连接互联网,因此都是使用本地源. 首先,需要将cdrom, 或 iso文件挂载到本地目录. 1.挂载光驱: 将cdrom 放入光驱. $  mkdir /media/cdr ...

  4. Windows Server 2016-图形化备份域控制器

    上边几章节我们补充了有关Windows Server 2016系统层面的相关内容,本章切回Active Directory正题,继续围绕AD域相关内容进行不断梳理补充.Windows Server B ...

  5. windows系统下安装node

    最近项目中需要使用到vue框架来实现前后端分离,于是抽时间看了下vue的相关只是,从官网了解到可以使用命令行工具(CLI)来构建应用,于是在本地环境预练了一下 下面这句话摘抄自vue文档: Vue.j ...

  6. 配置nginx服务器 —— Nginx添加多个二级子域名

    1.安装nginx centos/linux下的安装Nginx 2.安装好后进入Nginx目录中 在conf目录下建立一个vhost(ps:名字自己设定)文件夹 其中的$NGINXHOME为你的ngi ...

  7. Egret学习笔记 (Egret打飞机-7.实现敌机工厂)

    在游戏过程之,敌机是源源不断的冲屏幕上方往下飞,如果我们每一架敌机都直接new的话,在飞机很多的情况下,也许有性能问题. 就像前面子弹对象池一样,我们也要实现一个飞机对象池,也就是标题说的敌机工厂(之 ...

  8. linux_group总结

    group_name:passwd:GID:user_list 在/etc/group 中的每条记录分四个字段: 第一字段:用户组名称: 第二字段:用户组密码: 第三字段:GID 第四字段:用户列表, ...

  9. ubuntu追加磁盘空间

    在用wubi安装的时候,按默认的是20G空间,明显不够用,从Windows上追加空间 首先用win7自带的磁盘分区工具,从任意一个空余空间较多的磁盘划出一块新分区(无损数据)(如NTFS),作为ubu ...

  10. 妙用ES6解构和扩展运算符让你的代码更优雅

    http://www.cnblogs.com/chrischjh/p/4848934.html