C++ 概念笔记(一)-适用于考研复试
为某大学研究生复试做准备,参考书目为郑丽C++,C++ primer plus (主要参考)
特别鸣谢Alfred_Yong学长提供的C++基础知识概念学长的C++笔记
持续更新
C++面向对象概念参考:面向对象
C++11等深入概念参考:C++11等
目录
基础语法
1.说一下C++和C的区别
2.c++中的引用和指针
3.C++命名规则
4.static关键字的作用
5.c++中四种cast转换
6.++i和i++的区别
7.new/delete与malloc/free的区别
8.C语言参数压栈顺序
9.内联函数
10.作用域类型
11.数据内存
12.C++程序处理
13.class 和 struct 结构体
14.浅拷贝和深拷贝的区别
15.const
16.内存管理
17.野指针
18.include头文件的顺序以及双引号””和尖括号<>
19.内存泄漏
20.共用体&枚举
21.流对象
22.三种字符数组初始化的方法
23.STL 是什么?组成部分和区别。
基础语法
1.说一下C++和C的区别
C++是面向对象的语言,而C是面向过程的结构化编程语言
C++具有封装、继承和多态三种特性
C++相比C,增加多许多类型安全的功能,比如强制类型转换、
C++支持范式编程,比如模板类、函数模板等
2.c++中的引用和指针
指针是一个变量,有自己的一块空间,而引用只是一个别名;
使用sizeof看一个指针的大小是4(大小同INT变量),而引用则是被引用对象的大小;
指针可以被初始化为NULL,而引用必须被初始化且必须是一个已有对象的引用;
指针在使用中可以指向其它对象,但是引用只能是一个对象的引用,不能 被改变;
指针可以有多级指针(**p),而引用至于一级;
指针和引用使用++运算符的意义不一样;
3.C++命名规则
只能使用字母字符,数字和下划线
第一个不能为数字,不能使用关键字
区分大小写
4.static关键字的作用
1. 全局静态变量
在全局变量前加上关键字static,存储于静态存储区,自动初始化为0,作用域为文件
2.局部静态变量
在局部变量之前加上关键字static,存储于静态存储区,自动初始化为0,作用域为函数/语句块,但是当作用域结束后变量不会被销毁,再次调用值不变
3.静态函数
在函数返回类型前加static,静态函数只是在声明他的文件当中可见,不能被其他文件所用
4.类静态成员&静态函数
静态成员可以实现多个对象之间的数据共享,类的对象共同维护一份静态数据,静态函数用于调用静态数据,它们是属于类的,而不是某个对象,所有对象共享一个静态成员。静态成员通过<类名>::<静态成员>来使用。
5.c++中四种cast转换
1.const_cast
用于将const变量转为非const
2.static_cast
用于各种隐式转换,类似C中的强制类型转换
3.dynamic_cast
用于动态类型转换。只能用于含有虚函数的类,用于类层次间的向上和向下转化。(向上子类转为父类是安全的,父类转子类不安全(考虑一下子类非继承的数据成员初始化问题))
4.reinterpret_cast
可进行不同数据类型的转换,比如指针转INT
6.++i和i++的区别
++i先自增1,再返回,i++先返回i,再自增1,i++返回临时变量,++i返回本身
//++i
int& int::operator++()
{
*this +=1;
return *this;
}
//i++
const int int::operator(int)
{
int oldValue = *this;
++(*this);
return oldValue;
}
7.new/delete与malloc/free的区别
new/delete是C++的关键字,而malloc/free是C语言的库函数,后者使用必须指明申请内存空间的大小,对于类类型的对象,后者不会调用构造函数和析构函数
int *a=new int;delete a;
int *p=new int[10];delete []p;
8.C语言参数压栈顺序
从右到左
函数调用机制(CSAPP)
参数准备-call指令-栈上存储-leave/pop
从右至左参数入栈,指针或引用则保存地址,调用call,函数返回地址入栈,然后jmp到函数位置执行,旧的ebp入栈方便函数执行结束后退回原位置;设置新栈底 mov %esp, %ebp
为函数分配栈空间,向下生长,执行结束后返回值赋值给eax,调用leave还原栈顶栈底
9.内联函数
使用关键字 inline ,在编译时将函数体嵌入在每一个调用,执行时不进行控制的跳转
• 内联函数体内不能有循环语句和 switch 语句;
• 内联函数的定义必须出现在内联函数第一次被调用之前;
10.作用域类型
作用域是一个标识符在程序正文中有效的区域, C++的作用域分为:函数原型作用域、函数作用域、文件作用域(全局作用域)、块作用 域(局部作用域)、类作用域和名字空间作用域。
11.数据内存
自动存储:在函数定义中声明的变量,它们在程序开始执行其所属的函数或代码块时被创建,在执行完函数或代码块时,它们使用的内存被释放。
静态存储:static在程序整个运行过程中都存在。
动态存储:堆,用new运算符分配的内存将一直存在,直到使用delete运算符将其释放或程序结束为止
线程存储c++11:用于并行处理的不同线程,使用关键字thread_local声明的,则其生命周期与所属的线程一样长
12.C++程序处理
预处理-编译-汇编-链接
预处理阶段:对源代码文件中文件包含关系(头文件)、预编译语句(宏定义)进行分析和替换,生成预编译文件。
编译阶段:将经过预处理后的预编译文件转换成特定汇编代码,生成汇编文件
汇编阶段:将编译阶段生成的汇编文件转化成机器码,生成可重定位目标文件
链接阶段:将多个目标文件及所需要的库连接成最终的可执行目标文件
13.class 和 struct 结构体
默认成员访问权限不同,struct 默认是 public,而 class 默认是 private。
默认继承方式不同,struct 默认是 public,而 class 默认是 private。
在定义模板参数时可以用 class 但不能用 struct。
14.浅拷贝和深拷贝的区别
在拷贝的原始数据结构中存在指针时,浅拷贝拷贝指针本身,指向同一个地址,深拷贝则另开辟内存,完成指针的拷贝
15.const
定义 const 常量,具有不可变性,保护被修饰的东西。防止意外修改,const 定义的常量在程序运行过程中只有一份拷贝
const char * const * const p解释:
const char p 限定p为只读
const char* p: p为指向char的指针,const限定p指向的对象只读,即不能通过P改变char值
char* const p:限定P指向的对象不能改变
const char* const p:双限定
const char** p:p为指向指针的指针,const限定最终指向的对象只读
const char * const *p:限定最终对象和p指向的指针可读,即*p=?错误
const加在*前面限定指针,在后面限定对象
16.内存管理
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。
栈:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。
堆:就是那些由 new
分配的内存块,一般一个new
就要对应一个 delete
。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
自由存储区:就是那些由malloc
等分配的内存块,他和堆是十分相似的,不过它是用free
来结束自己的生命的。
全局/静态存储区:全局变量和静态变量被分配到同一块内存中
常量存储区:这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改
内存对齐 :变量的起始地址能够被其对齐值整除,结构体变量的对齐值为最宽的成员大小。 一般默认对齐值为4
17.野指针
使用free
或delete
释放了内存后,没有将指针设置为NULL
18.
include头文件的顺序以及双引号””和尖括号<>
编译器预处理阶段查找头文件的路径不一样。“”首先在当前头文件目录找,再去系统头文件找
对于使用尖括号包含的头文件,查找头文件的路径顺序为:编译器设置的头文件路径-系统头文件
19.内存泄漏
内存泄漏(memory leak)是指由于疏忽或错误造成了程序未能释放掉不再使用的内存的情况。导致内存浪费,搞忘free或者delete造成堆内存泄漏
20.共用体&枚举
union 共用体名{成员列表
};
共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。共用体所占内存大小为共用体内数据类型最大的那个。只能存储int long double
enum 枚举名 {枚举元素1,枚举元素2,……};
枚举成员为常量,整型,可提升为INT,枚举只定义了赋值运算,可进行显示设置枚举量的值
21.流对象
cout标准输出,cerr标准错误输出,没有缓冲,发送给它的内容立即被输出,clog类似于cerr,但是有缓冲,缓冲区满时被输出;cin输入流
输入输出的标准库:fstream、iomanip、ios、iosfwd、iostream、ostream、istream、sstream、streambuf
22.三种字符数组初始化的方法
char str[5] = {“hello”};
char str[6] = {‘a’,‘b’,‘c’,‘d’,‘e’,’\0’};
char str[] = “abcde”;
23.STL 是什么?组成部分和区别。
STL 是 c++提供的标准模板库。
STL 的主要组成部分为:容器、迭代器、算法、函数对象和适配器。
C++ 概念笔记(一)-适用于考研复试相关推荐
- 计算机考研复试_C++重点知识笔记面试题
前言: 考研复试面试时经常会问到一些编程语言的基础知识,尤其C++面向对象这一块,为了避免会用不会说的情况,本文作为个人笔记用最精炼的语言梳理了复试面试常考察的知识点(后附高频面试题),个人这块概念知 ...
- 计算机考研复试【C++重点知识笔记面试题】
前言: 考研复试面试时经常会问到一些编程语言的基础知识,尤其C++面向对象这一块,为了避免会用不会说的情况,本文作为个人笔记用最精炼的语言梳理了复试面试常考察的知识点(后附高频面试题),个人这块概 ...
- 考研复试——软件工程笔记归纳+思维导图
考研复试的软件工程重点归纳 原文记录在我的幕布https://mubu.com/doc/3C3pXXIGg0上 里面查看观感更好 思维导图在最后,较为庞大.同样推荐到链接里面查看.点击查看思维导图即可 ...
- 【考研复试】西电833/834计网笔记
[考研复试]833/834计网笔记 分层可以带来如下好处 OSI五层模型 应用层 运输层 数据链路层 物理层 数据链路层 为什么要划分子网 局域网 虚电路服务与数据报服务的主要区别 IP层处理数据报的 ...
- 计算机通信与网络 沈金龙 北京邮电大学出版社 笔记,沈阳工业大学2016考研复试大纲:计算机网络...
考研成绩已发布,接下来要迎接的就是复试和调剂大关,考生要关注院校发布的复试大纲及调剂公告,早点复习专业课做好充分的准备.下面是新东方在线跟踪转发的沈阳工业大学2016考研复试大纲,请大家对照各自专业及 ...
- 复试编程c语言,(考研复试)C语言笔记
<(考研复试)C语言笔记>由会员分享,可在线阅读,更多相关<(考研复试)C语言笔记(17页珍藏版)>请在人人文库网上搜索. 1.1:用高级语言编写的程序叫做源程序,然后用编译程 ...
- 计算机面试(考研复试)问题整理
中科大复试准备 数据结构->操作系统->计算机网络->通信原理->微机原理-> 软件工程,编译原理,数据库 计算机考研复试整理 PDF文件自取 数据结构 1. 时间复杂度 ...
- 考研复试面试专业问题
中科大复试准备 数据结构->操作系统->计算机网络->通信原理->微机原理-> 软件工程,编译原理,数据库 计算机考研复试整理 PDF文件自取 数据结构 1. 时间复杂度 ...
- 数据结构笔记(王道考研) 第八章:排序
大部分内容基于中国大学MOOC的2021考研数据结构课程所做的笔记,该课属于付费课程(不过盗版网盘资源也不难找...).后续又根据23年考研的大纲对内容做了一些调整,将二叉排序树和平衡二叉树的内容挪到 ...
最新文章
- 中英文怎么算 字符长度_如何将混合了中英文及不同数量空格的文本,快速拆分成多列...
- maya材质sheen_maya怎样做耐磨金属质感?
- 【Elasticsearch】 Elasticsearch中数据是如何存储的
- 201521460005 实验五
- 学习爬虫的第三天 (bs4 \ urllib \ xlwt \ re 的练习爬取豆瓣top250保存成excel格式)
- 数据中心与灾备中心建设总结
- 今晚直播 | 手把手带你用 Three.js 实现粒子特效,走入 3D 世界!
- C语言程序计算自己活了多少天
- 对标金九银十:各大厂最新Java面试真题整理+简历模板
- SpringBoot约定大于配置理解
- Affinity Designer笔记:从图像创建调色板
- Ear Clipping算法简介
- 模式对话框和非模式对话框的区别(出自MFC windows程序设计第二版p370)
- android加入图片命名规则
- R6220关于breed刷机,breed-2022-07-24 r1416
- Android手机传感器的使用
- Java自定义异常封装
- php后台怎么搜索城市分类,WordPress在后台主题设置侧栏显示所有分类目录和对应id...
- java-数组转字符串
- Linux 限制通过SSH登录
热门文章
- golang管道chan
- 阿里云“在家实践”计划测试题答案(部分)
- iOS篇—Demo3—图案解锁
- Hadoop小兵笔记【五】hadoop2.2.0伪分布式环境搭建疑难-第一个用例wordcount失败
- 2020-12-29 A002-186-2601
- Android 7.1 增加屏幕边缘滑动事件(手势滑动)两种方式(Back,Home,Menu功能键) 免开启无障碍功能
- 地方门户还有未来吗?
- 用友java怎么下载_网上下载石大的家庭财务管理系统的源代码,要怎么运行啊,里面有jsp文件,也有Java文件,也有sql文件...
- 图文解析视频监控走线
- 计算机组成原理及指令怎么反汇编,计算机组成原理课程设计-位同步时钟提取电路设计与实现.doc...