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(一)
接上文 多线程编程学习笔记——使用并发集合(一) 接上文 多线程编程学习笔记——使用并发集合(二) 接上文 多线程编程学习笔记——使用并发集合(三) 假设以下场景,如果在客户端运行程序,最的事情之一是 ...
随机推荐
- JSTL的相关使用
index.jsp <%@ page language="java" import="java.util.*" pageEncoding="UT ...
- Sublime Text编辑远程Linux服务器上的文件
sublime有个叫sftp的插件,可以通过它直接打开远程机器上的文件进行编辑,并在保存后直接同步到远程linux服务器上. 用Package Control安装插件 按下Ctrl+Shift+P调出 ...
- (MonoGame从入门到放弃-2) 初识MonoGame
上一节记录了大致的搭建MonoGame的环境,默认大家都是都是使用过Visual Studio的,没使用过的话,可以去https://www.visualstudio.com/下载一个试试,社区版免费 ...
- 如何使用 window api 转换字符集?
//宽字符转多字节 std::string W2A(const std::wstring& utf8) { int buffSize = WideCharToMultiByte(CP_ACP, ...
- 常用的CSS框架
常用的CSS框架 之前在写自己的个人网站的时候,由于自己Web前端不是特别好,于是就去找相关的CSS框架来搭建页面了. 找到以下这么一篇文章(列出了很多常用的CSS框架): http://w3scho ...
- python爬虫之基本知识
随着数据的海量增长,我们需要在互联网上选取所需要的数据进行自己研究的分析和实验.这就用到了爬虫这一技术,下面就跟着小编一起初遇python爬虫! 一.请求-响应 在利用python语言实现爬虫时,主要 ...
- filebeat.yml(中文配置详解)
################### Filebeat Configuration Example ######################### ####################### ...
- jstree树形菜单
final 用于声明属性.方法和类,分别表示属性不可变,方法不可重写,类不可继承.其实可以参考用easyui的tree 和 ztree参考: https://www.jstree.com/demo/ ...
- ActiveMQ的运用
MQ的消息队列模式有2种,一种是点对点模式,一种是订阅模式. 点对点模式:点对点的模式主要建立在一个队列上面,当连接一个列队的时候,发送端不需要知道接收端是否正在接收,可以直接向ActiveMQ发送消 ...
- 一句python,一句R︱python中的字符串操作、中文乱码
先学了R,最近刚刚上手python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句python,对应写一句R. pandas可谓如雷贯耳,数据处理神器. 以下符号: = ...