C++编程理论学习笔记
1.变量:
变量的值都存储在内存中。内存中每个单元都有一个唯一的编号,就是单元的地址,变量在运行时占据内存单元互不相同的地址,C++的目标代码靠地址来区别不同的变量。
2.表达式:
虽然内存是存储c++变量的主要场所,但不可能一切读写操作都通过在内存中进行,事实上,CPU的大部分读写操作都是对寄存器进行的。
寄存器从内存中取得变量值,存储每一步运算的中间结果,最后返回给表达式。
3.函数调用:
首先计算实参列表中各个表达式的值(每个实参都是一个表达式),然后主调函数暂停,执行被调函数,形参的初值就是实参表达式的结果。
返回值会先复制到一个无名的临时对象,然后再把临时对象的值传给表达式之后临时对象自动消失。所以返回值不能是引用类型因为函数一结束对象就消失了。
4.引用传递:
引用是一种特殊类型的变量,可以被认为是另一个变量的别名,用引用作为形参,在函数调用时发生的参数传递称为引用传递,俗称“传引用”。
传引用与传值不同,其形参的初始化不在类型说明时进行,而是在执行主调函数中的表达式时才获得内存空间,这样引用类型的形参就通过实参来初始化,成为实参的一个别名,于是对形参的操作直接作用于实参。
5.运行栈:
全局变量都有唯一的地址,但局部变量不行,如果为局部变量分配唯一的地址,不仅降低空间的利用率,更重要的是相同名称的局部变量可能有不同的值,这些值必须同时保存在内存中又不能相互影响,所以不能为局部变量分配唯一的地址。
而函数的形参的情形与局部变量相似,因此它们都需要存储在特殊的内存空间----运行栈中。
运行栈与数据结构中的栈有所区别,在数据结构中,栈是一种容器,后入先出。
但运行栈是一段实际存在的内存空间,与存储全局变量的内存空间没有什么不同,只是寻址的方式不同而已。
运行栈的数据分为一个一个的栈帧,每个栈帧对应一次函数调用。通过esp寄存器记录栈顶,ebp记录开始调用时栈指针的位置,函数调用时栈帧压入运行栈,返回时压出,与栈的后入先出是一样的。
6.内联成员函数:
相当简单的成员函数才把它声明为inline内联函数,也不是声明了内联函数后编译器一定会把它当作内联函数,内联成员函数没有被调用,只是在编译时被插入到每一个调用它的地方。尽量使用显式声明。
7.防卫式声明:
#ifndef __CLASS__
#define __CLASS__
...//class
#endif
防止类重复定义
8.前向引用声明:
当两个类相互组合或相互调用时,需要后一个类在前面有一个前向引用声明,告诉前一个类有这么一个类存在,这样编译器就不会认为是错误,相当于函数原型声明。
class A; //声明类名即可
9.复制构造函数:
用同个类的对象去复制出此类的一个新的对象,复制构造函数形参是本类对象的引用,只有把对象用值传递时才会调用复制构造函数,如果传递引用,则不会调用复制构造函数。
class a(...);
class b(a);
class b=a;
这两种方式都会调用复制构造函数
当我们没有定义复制构造函数时,系统自动生成隐式的复制构造函数,直接将原对象的数据成员值一一赋给新对象中对应的数据成员。
但是当类的数据成员中有指针类型时,默认复制构造函数实现的是浅复制,会带来数据安全隐患。
浅复制就是直接复制地址,没有去申请内存空间,比如指针直接把地址复制给了新对象,两者都指向同一段内存,无论谁修改都会影响另一方,数据没有独立性,而且,在程序结束时会自动调用两次析构函数,分别释放两对象的同一个内存空间,必然引起运行错误!
所以有指针类型的成员时一定要写自己的复制构造函数,实现深复制--申请内存、再把元素复制过来。
10.初始化列表
在构造函数中才有的语法,常用。
fun(param1 a,param2 b):one(a),two(b){}
相当于
fun(a,b){
one=a;
two=b;
}
one,two分别是两个内嵌对象,可以多个
11.UML类图关系

12.参数传递原则
(1)数组传指针
(2)结构:不修改则加Const ,小则传值,大传引用或指针;
(3)类:传引用,不修改则加Const
(4)内置数据类型:不修改传值,修改传指针
C++编程理论学习笔记的更多相关文章
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- 转《WF编程》笔记目录
<WF编程>笔记目录 2008-03-18 09:33 by Windie Chai, 26803 阅读, 49 评论, 收藏, 编辑 WF笔记开始 <WF编程>系列之0 - ...
- Node.js高级编程读书笔记Outline
Motivation 世俗一把,看看前端的JavaScript究竟能做什么. 顺便检验一下自己的学习能力. Audience 想看偏后台的Java程序员关于前端JavaScript的认识的职业前端工程 ...
- Linux Shell编程学习笔记——目录(附笔记资源下载)
LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...
- DirectX 11游戏编程学习笔记之8: 第6章Drawing in Direct3D(在Direct3D中绘制)(习题解答)
本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com 注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候 ...
- 多线程编程学习笔记——async和await(一)
接上文 多线程编程学习笔记——任务并行库(一) 接上文 多线程编程学习笔记——任务并行库(二) 接上文 多线程编程学习笔记——任务并行库(三) 接上文 多线程编程学习笔记——任务并行库(四) 通过前面 ...
- 多线程编程学习笔记——async和await(二)
接上文 多线程编程学习笔记——async和await(一) 三. 对连续的异步任务使用await操作符 本示例学习如何阅读有多个await方法方法时,程序的实际流程是怎么样的,理解await的异步 ...
- 多线程编程学习笔记——async和await(三)
接上文 多线程编程学习笔记——async和await(一) 接上文 多线程编程学习笔记——async和await(二) 五. 处理异步操作中的异常 本示例学习如何在异步函数中处理异常,学习如何对多 ...
- 多线程编程学习笔记——使用异步IO(一)
接上文 多线程编程学习笔记——使用并发集合(一) 接上文 多线程编程学习笔记——使用并发集合(二) 接上文 多线程编程学习笔记——使用并发集合(三) 假设以下场景,如果在客户端运行程序,最的事情之一是 ...
随机推荐
- Yii2 日志处理
最近开发一个新的PHP项目,终于脱离了某框架的魔爪(之前被折磨的不轻),选用了江湖中如雷贯耳的Yii2框架.每个项目代码的运行,日志是必不可少的,在开发中踩了一遍Yii2日志管理的坑,看过很多网上对Y ...
- Java多线程推荐使用的停止方法和暂停方法
判断线程结束和让线程结束 package cn.lonecloud.Thread.study; /** * 用于循环1000次的线程 * @Title: Run1000Thread.java * @P ...
- FFMpeg在Ubuntu上的安装和使用
在Ubuntu Server上编译FFmpeg FFmpeg是最流行的开源视频转码工具包,在Ubuntu上可以直接通过apt-get安装,但是默认的编码器不提供x264这些non-free的编码器,所 ...
- 算法提高 矩阵乘法 区间DP
这是神题,n <= 1000,如果是极限数据普通的n^3区间DP怎么可能过?可偏偏就过了. 刘汝佳大哥的训练指南上面说的存在nlgn的算法解决矩阵链乘问题,可是百度都找不到.... AC代码 # ...
- Spring Boot 整合 Mybatis Annotation 注解的完整 Web 案例
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 公司需要人.产品.业务和方向,方向又要人.产品.业务和方向,方向… 循环』 本文提纲一. ...
- Ironic几种不同的场景下的网络拓扑
最近帮领导做了几页ppt,总结几种场景下ironic管理物理机网络的网络拓扑,简单做成一份文章记录下.只是方便自己记忆,没有认真修改.如果对ironic有一定了解,可以看下,加深理解. 1. vlan ...
- OpenStack中memcached的使用和实现
概述 主要分享下个人对Liberty版本openstack中cache使用的理解,由于作者水平有限,难免有所错误,疏漏,还望批评指正. openstack中可以使用cache层来缓存数据,Libert ...
- Centos小白学习
目录 查看机器设备信息 有线网络设置(必须) 设置主机名(必须) 设置sudo用户,一般默认只有root可以使用(必须) yum更新源(必须) 安装完Centos后桌面宽度不能自适应 Centos安装 ...
- Java for Anfroid 学习之 内部类
1.什么是内部类 所谓的内部类,就是一个类定义在另一个类的里面. 代码: class A { int i; class B { int j; int func(){ int resu ...
- asp.mvc中的vue分页实例,分页组件无法重置reload,解决点击查询按钮后,分页不刷新的问题
刚刚接触Vue.js,现在需要做一个查询功能,并且进行服务端分页.主要思路是在页面中注册一个分页组件,然后进行调用.代码如下 1.引用vue.js,具体去网上下载 2.在html的body中添加如下代 ...