总结一些笔记上的C和C++知识点
1、如果没有提供自己的copy构造函数,C++会提供一个默认的copy构造函数,是成员到成员的copy。
2、C中static的作用:
1、隐藏:如果未加static,编译多个文件的时候,所有的全局变量和函数都具有全局可见性,故使用static可以在 不同文件 中使用 同名的函数和同名的变量。
2、保持:只初始化一次,存在静态存储区(全局变量和static变量存在这),内容可以持久保存。
3、默认初始化为0,在静态存储区中内存中所有字节默认值是0x00。
注:存储在静态存储区的变量只初始化一次。
auto和static的区别:
auto类型局部变量就是普通的局部变量(不加修饰的局部变量默认为该类型)。该类型局部变量存储在栈上,在动态存储区,生命周期仅限于定义它的函数,函数结束,它就自动释放。static类型局部变量存储在静态存储区,在程序整个运行期间都不释放。两者之间的作用域相同,但生存期不同。
static局部变量在所处模块在初次运行时进行初始化工作,且只操作一次。
对于局部静态变量,如果不赋初值,编译期会自动赋初值0或空字符,而auto类型的初值是不确定的。(对于C++中的class对象例外,class的对象实例如果不初始化,则会自动调用默认构造函数,不管是否是static类型)
在C中 static有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。但为了限制全局变量/函数的作用域, 函数或变量前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。注意此时, 对于外部(全局)变量, 不论是否有static限制, 它的存储区域都是在静态存储区,生存期都是全局的. 此时的static只是起作用域限制作用, 限定作用域在本模块(文件)内部.
使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。
C+ +重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数. 这是与普通成员函数的最大区别,
也是其应用所在, 比如在对某一个类的对象进行计数时, 计数生成多少个类的实例,
就可以用到静态数据成员. 在这里面, static既不是限定作用域的, 也不是扩展生存期的作用, 而是指示变量/函数在此类中的唯一性. 这也是”属于一个类而不是属于此类的任何特定对象的变量和函数”的含义. 因为它是对整个类来说是唯一的,因此不可能属于某一个实例对象的. (针对静态数据成员而言, 成员函数不管是否是static, 在内存中只有一个副本, 普通成员函数调用时, 需要传入this指针, static成员函数调用时, 没有this指针. )
3、深浅copy:
浅copy:创建对象用现有的对象来初始化,简单赋值,不分配资源(指针变量成员分配动态内存)。
深copy:分配资源,需要自己定义的copy构造函数,不但copy成员,也copy分配的资源。
4、C++ const 关键字
表示不可改变,不仅仅表示一个常量,还可以修饰 数据成员、参数、返回值、成员函数、等,用于强制保护,不可被修改,增强健壮性。
5、定义常量 :
C 使用宏#define定义
C++ 使用const定义
区别:const是有数据类型的常量,而宏常量没有, 编译器对于数据类型可以进行静态安全检查,但是对于宏常量不会进行安全检查,仅仅是字符替换。
6、栈和堆
栈,在执行函数时,函数的内部变量的存储单元在栈上创建,函数结束,这些存储单元自动释放,栈内存分配运算内置于处理器中,效率高,但是容量小。
堆,又称动态内存分配,程序在运行时用malloc或new申请的内存,大小可以由申请决定,由程序员使用delete或者free来释放,动态内存生存期自己决定,使用灵活。
7、new\delete 和malloc()\free()
malloc()和free()是C语言的标准库函数,new|delete是C++的运算符,都可以用来申请和释放内存,但是malloc()和free()函数不在编译器的控制权限之内,不能把构造函数和析构函数的任务强加给它们。
8、#include<a.h> 编译器从 标准库 中开始搜索;
#include"a.h" 编译器从 用户的工作路径 开始搜索。
9、C++程序调用被C编译器编译之后的函数需要加 extern"C"
因为C++支持函数重载,C不支持函数重载
函数被C++编译之后在库中的名字与C编译之后的不同。
例如:void foo (int x ,int y); C编译之后叫_foo,C++编译之后叫_foo_int_int的名字,
C++提供了C连接的交换的指定符号 extern“C” 来解决名字匹配问题。
10、C++多态实现:
派生类和虚函数实现,基类和派生类使用同样函数名,完成不同的操作具体实现相隔离的另一类接口;
多态提高了代码的组织性和可读性
虚函数则根据类型的不同来实现不同的隔离。
11、动态特性:
编译时确定程序的功能,叫静态特性。
程序的功能在运行时刻才确定,动态特性。
C++ 中使用 :虚函数、动态绑定、多态、构成了出色的动态特性。
12、封装 C++
封装即信息隐藏,通过特性和行为的组合来创建新数据类型,让接口和具体实现相隔离,
C++通过类来实现,让模块仅仅公开必须让外界知道的接口,来避免模块之间的行为干扰。
13、RTTI (Run-Time Type Identification)
只有一个指向基类的指针或引用是确定一个对象的准确类型。
总结一些笔记上的C和C++知识点的更多相关文章
- pyqt样式表语法笔记(上) --原创
pyqt样式表语法笔记(上) pyqt QSS python 样式表 因为软件课设的原因开始学习使用pyqt4,才发现原来它也有样式表,而且语法跟css基本相同,而且一些功能实现起来感觉比js要简单方 ...
- Typora笔记上传到博客
Typora笔记上传到博客 Markdown是一种轻量级标记语言,排版语法简洁,让人们更多地关注内容本身而非排版.它使用易读易写的纯文本格式编写文档,可与HTML混编,可导出 HTML.PDF 以及本 ...
- IOS学习笔记48--一些常见的IOS知识点+面试题
IOS学习笔记48--一些常见的IOS知识点+面试题 1.堆和栈什么区别? 答:管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制:对于堆来说,释放工作由程序员控制,容易产生memor ...
- Python机器学习笔记:不得不了解的机器学习知识点(2)
之前一篇笔记: Python机器学习笔记:不得不了解的机器学习知识点(1) 1,什么样的资料集不适合用深度学习? 数据集太小,数据样本不足时,深度学习相对其它机器学习算法,没有明显优势. 数据集没有局 ...
- 史上前端面试最全知识点(附答案)---html & js & css
史上前端面试最全知识点(附答案) 一.html & js & css 1.AMD和CMD是什么?它们的区别有哪些? AMD和CMD是二种模块定义规范.现在都使用模块化编程,AMD,异步 ...
- 黑马程序员----java基础笔记上(毕向东)
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 笔记一共记录了毕向东的java基础的25天课程,分上.中.下 本片为上篇,涵盖前10天课程 1. ...
- Bootstrap学习笔记上(带源码)
阅读目录 排版 表单 网格系统 菜单.按钮 做好笔记方便日后查阅o(╯□╰)o bootstrap简介: ☑ 简单灵活可用于架构流行的用户界面和交互接口的html.css.javascript工具集 ...
- 《Windows核心编程》读书笔记 上
[C++]<Windows核心编程>读书笔记 这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对 ...
- 初探内核之《Linux内核设计与实现》笔记上
内核简介 本篇简单介绍内核相关的基本概念. 主要内容: 单内核和微内核 内核版本号 1. 单内核和微内核 原理 优势 劣势 单内核 整个内核都在一个大内核地址空间上运行. 1. 简单.2. 高效 ...
随机推荐
- Golang之字符串格式化
字符串格式化 // Go 之 字符串格式化 // // Copyright (c) 2015 - Batu // package main import ( "fmt" ) typ ...
- 了解HTTP协议栈(实践篇)
关于http协议的理论知识,我在这里就不详细说明了,具体下面给出的链接有.接下来都是用具体的操作显示的,各位可以结合起来看. 一.使用nc打开端口,并使用浏览器进行访问 (对应文章中的HTTP协议详解 ...
- IP地址格式转换(htonl、ntohl;inet_addr、inet_ntoa)
名词解析: 主机字节序: 不同的CPU有不同的字节序类型,这些字节序是指整数在内存中保存的顺序,这个叫做主机序.最常见的有两种 1.Little endian:低字节存高地址,高字节存低地址 2.Bi ...
- django中celery的使用
1.什么是celery celery是一个异步任务框架,当我们的程序中存在一个比较耗时的操作时,可以启动这个异步任务框架, 将耗时操作,交给它来完成,这样节省了程序的执行时间. 2.celery的原理 ...
- Spark SQL inferSchema实现原理探微(Python)【转】
使用Spark SQL的基础是“注册”(Register)若干表,表的一个重要组成部分就是模式,Spark SQL提供两种选项供用户选择: (1)applySchema applySche ...
- vim复制内容到系统剪贴板
vim提供了y键盘操作用于复制文本,但是复制之后的文本位于当前窗口的缓冲区中,不在系统剪贴板中,这给跨程序文本拷贝代码很来很多麻烦.搜索发现,可以使用]y指令快速将选定的文本复制到系统剪贴板中. 顺便 ...
- Django服务端读取excel文件并且传输到接口
path_name = "opboss_download_" + str(int(time.time())) + ".csv" print(path_name) ...
- SP_OACreate提权经验
在xp_cmdshell被删除或者出错情况下,可以充分利用SP_OACreate进行提权 首先 EXEC sp_configure 'show advanced options', 1; ...
- Servlet实例开发---学生管理系统
Servlet总结 本程序采用Servlet开发技术,MVC分层,所有程序在设计时都要接口为操作的标准,主要逻辑操作只有增删改查. 具体实现操作请看源代码. 本程序采用的是MYSQL数据库,需加入相应 ...
- [emacs] org-mode的一些小技巧
Table of Contents 1 快速输入 #+BEGIN_SRC … #+END_SRC 2 代码按语法高亮 3 导出成HTML时的一些问题和技巧 3.1 生成目录表 3.2 为每个分节的标题 ...