热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++编程理论学习笔记

1.变量:变量的值都存储在内存中。内存中每个单元都有一个唯一的编号,就是单元的地址,变量在运行时占据内存单元互不相同的地址,C++的目标代码靠地址来区别不同的变量。2.表达式:虽然内存是存储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)内置数据类型:不修改传值,修改传指针

  

 


推荐阅读
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 本文介绍了2020年计算机二级MSOffice的选择习题及答案,详细解析了操作系统的五大功能模块,包括处理器管理、作业管理、存储器管理、设备管理和文件管理。同时,还解答了算法的有穷性的含义。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了Java的公式汇总及相关知识,包括定义变量的语法格式、类型转换公式、三元表达式、定义新的实例的格式、引用类型的方法以及数组静态初始化等内容。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • C++语言入门:数组的基本知识和应用领域
    本文介绍了C++语言的基本知识和应用领域,包括C++语言与Python语言的区别、C++语言的结构化特点、关键字和控制语句的使用、运算符的种类和表达式的灵活性、各种数据类型的运算以及指针概念的引入。同时,还探讨了C++语言在代码效率方面的优势和与汇编语言的比较。对于想要学习C++语言的初学者来说,本文提供了一个简洁而全面的入门指南。 ... [详细]
  • Unit4博客&课程总结Unit4作业的架构设计本单元作业的设计我分为了三个模块处理:模型构建+预处理+任务函数,前两部分即为整个图的完整构建,第三部分即为实现题目要求的查询方法。 ... [详细]
  • STL学习笔记--数值算法
    数值算法  C++STL的数值算法(Numericalgorithms)是一组对容器元素进行数值计算的模板函数,包括容器元素求和accumulate、两序列元素的内积inner_pro ... [详细]
  • 如何用Vscode和 Visual stdudio配置C++环境
    这篇文章主要讲解了“如何用Vscode和Visualstdudio配置C++环境”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深 ... [详细]
  • 数据结构-图详解(图基本概念、图的存储结构及C++实现)
    本文主要介绍关于数据结构,c++,图论的知识点,对【数据结构-图详解(图基本概念、图的存储结构及C++实现)】和【数据结构图的存储结构代码】有兴趣的朋友可以看下由【NUC_Dodamce】投稿的技术文 ... [详细]
author-avatar
我不是不是小受
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有