为某大学研究生复试做准备,参考书目为郑丽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.野指针

使用freedelete释放了内存后,没有将指针设置为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++ 概念笔记(一)-适用于考研复试相关推荐

  1. 计算机考研复试_C++重点知识笔记面试题

    前言: 考研复试面试时经常会问到一些编程语言的基础知识,尤其C++面向对象这一块,为了避免会用不会说的情况,本文作为个人笔记用最精炼的语言梳理了复试面试常考察的知识点(后附高频面试题),个人这块概念知 ...

  2. 计算机考研复试【C++重点知识笔记面试题】

    前言:   考研复试面试时经常会问到一些编程语言的基础知识,尤其C++面向对象这一块,为了避免会用不会说的情况,本文作为个人笔记用最精炼的语言梳理了复试面试常考察的知识点(后附高频面试题),个人这块概 ...

  3. 考研复试——软件工程笔记归纳+思维导图

    考研复试的软件工程重点归纳 原文记录在我的幕布https://mubu.com/doc/3C3pXXIGg0上 里面查看观感更好 思维导图在最后,较为庞大.同样推荐到链接里面查看.点击查看思维导图即可 ...

  4. 【考研复试】西电833/834计网笔记

    [考研复试]833/834计网笔记 分层可以带来如下好处 OSI五层模型 应用层 运输层 数据链路层 物理层 数据链路层 为什么要划分子网 局域网 虚电路服务与数据报服务的主要区别 IP层处理数据报的 ...

  5. 计算机通信与网络 沈金龙 北京邮电大学出版社 笔记,沈阳工业大学2016考研复试大纲:计算机网络...

    考研成绩已发布,接下来要迎接的就是复试和调剂大关,考生要关注院校发布的复试大纲及调剂公告,早点复习专业课做好充分的准备.下面是新东方在线跟踪转发的沈阳工业大学2016考研复试大纲,请大家对照各自专业及 ...

  6. 复试编程c语言,(考研复试)C语言笔记

    <(考研复试)C语言笔记>由会员分享,可在线阅读,更多相关<(考研复试)C语言笔记(17页珍藏版)>请在人人文库网上搜索. 1.1:用高级语言编写的程序叫做源程序,然后用编译程 ...

  7. 计算机面试(考研复试)问题整理

    中科大复试准备 数据结构->操作系统->计算机网络->通信原理->微机原理-> 软件工程,编译原理,数据库 计算机考研复试整理 PDF文件自取 数据结构 1. 时间复杂度 ...

  8. 考研复试面试专业问题

    中科大复试准备 数据结构->操作系统->计算机网络->通信原理->微机原理-> 软件工程,编译原理,数据库 计算机考研复试整理 PDF文件自取 数据结构 1. 时间复杂度 ...

  9. 数据结构笔记(王道考研) 第八章:排序

    大部分内容基于中国大学MOOC的2021考研数据结构课程所做的笔记,该课属于付费课程(不过盗版网盘资源也不难找...).后续又根据23年考研的大纲对内容做了一些调整,将二叉排序树和平衡二叉树的内容挪到 ...

最新文章

  1. 中英文怎么算 字符长度_如何将混合了中英文及不同数量空格的文本,快速拆分成多列...
  2. maya材质sheen_maya怎样做耐磨金属质感?
  3. 【Elasticsearch】 Elasticsearch中数据是如何存储的
  4. 201521460005 实验五
  5. 学习爬虫的第三天 (bs4 \ urllib \ xlwt \ re 的练习爬取豆瓣top250保存成excel格式)
  6. 数据中心与灾备中心建设总结
  7. 今晚直播 | 手把手带你用 Three.js 实现粒子特效,走入 3D 世界!
  8. C语言程序计算自己活了多少天
  9. 对标金九银十:各大厂最新Java面试真题整理+简历模板
  10. SpringBoot约定大于配置理解
  11. Affinity Designer笔记:从图像创建调色板
  12. Ear Clipping算法简介
  13. 模式对话框和非模式对话框的区别(出自MFC windows程序设计第二版p370)
  14. android加入图片命名规则
  15. R6220关于breed刷机,breed-2022-07-24 r1416
  16. Android手机传感器的使用
  17. Java自定义异常封装
  18. php后台怎么搜索城市分类,WordPress在后台主题设置侧栏显示所有分类目录和对应id...
  19. java-数组转字符串
  20. Linux 限制通过SSH登录

热门文章

  1. golang管道chan
  2. 阿里云“在家实践”计划测试题答案(部分)
  3. iOS篇—Demo3—图案解锁
  4. Hadoop小兵笔记【五】hadoop2.2.0伪分布式环境搭建疑难-第一个用例wordcount失败
  5. 2020-12-29 A002-186-2601
  6. Android 7.1 增加屏幕边缘滑动事件(手势滑动)两种方式(Back,Home,Menu功能键) 免开启无障碍功能
  7. 地方门户还有未来吗?
  8. 用友java怎么下载_网上下载石大的家庭财务管理系统的源代码,要怎么运行啊,里面有jsp文件,也有Java文件,也有sql文件...
  9. 图文解析视频监控走线
  10. 计算机组成原理及指令怎么反汇编,计算机组成原理课程设计-位同步时钟提取电路设计与实现.doc...