C++面向对象程序设计研究生复试面试知识点总结

提示文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


个人学习资料存档,(参考课本为中国铁道出版,陈维兴,林小茶编著,C++面向对象程序设计第三版),重点知识点选择非常主观,根据自己知识的漏洞和模糊点整理,仅仅为了复试面试准备的,侧重定义,名词解释,以及易混淆知识点的对比记忆


C++存储类

   定义:存储类定义C++程序中变量/函数的可见范围和生命周期

auto存储类
○ 声明变量时根据初始化表达式自动推断该变量的类型
○ 声明函数函数返回值的占位符
static存储类
○ 使用static修饰局部变量可以在函数调用之间保持局部变量的值
○ 不需要在每次他进入和离开作用域时进行创建和销毁
extern存储类
○ 提供一个全局变量的引用,可以认为extern用来在另一个文件中声名一个全局变量(对所有程序文件都可见)

const修饰符

const修饰符+指针=指向常量的指针

常指针:是指指向常量的常指针,不能动,地址是常量

指针和引用

指针是一个变量,其值为另一个变量的地址
引用是一个别名,一旦把引用初始化为某个变量,就可以用该引用名称来指向变量

区别方法
○ 初始化→引用必须在创建时初始化;指针可以在任何时间初始化
○ 是否可变?引用只有在初始化的时候可变;指针可变
○ 能否为空?引用不能为空,引用必须链接到一块合法的内存;指针可以为空
this指针
○ c++中每一个对象都能通过this指针来访问自己的地址
○ 使用:在成员函数内部可以用来指向调用对象
○ 总是指向当前对象,是所有成员函数的隐含参数(PS:友元函数没有,因为友元函数不是成员函数

类和对象

对象

○ 定义:将描述其属性的数据和对这些数据施加的一组操作封装到一起的统一体(数据+操作)

○ 定义:相同数据和相同操作的一组对象的集合(数据+函数
○ 类中的数据和方法称为类的成员

○ 类的成员函数

■ 定义:把定义和原型写在类内部的函数
■ PS:友元函数不属于成员函数(友元类:整个类及所有成员都是友元)

○ 类的特殊成员函数

■ 类构造函数
● 使用:创建类的新对象时执行
● 用途:可用于为某些成员变量设置初始值
■ 类析构函数
● 使用:删除所创建对象时执行
● 用途:有助于在跳出程序前释放资源

○ 内联函数

■ 目的:解决程序中函数调用的效率问题(用空间换时间)
■ 原理:编译器编译时将程序中出现的内联函数调用表达式用内联函数函数体进行替换(1到5行的小函数
■ 隐式内联函数
● 定义在类内
■ 显式内联函数
● 在类内显式声明,类外定义(成员被函数前加了inline)

○ 类访问修饰符

类成员的访问限制是通过在类主题内部对各个区域标记public,private,protected来指定的,即访问修饰符
■ public:类外部可访问
■ private:外部不可访问,类和友元函数可访问
■ protected:派生类中可访问

static静态成员

无论创建多少个类的对象,静态成员都只有一个副本
不会在对象销毁时销毁,生命周期较长

静态成员函数

○ 只能访问静态成员数据,其他静态成员函数,类外其他函数
○ 如果把函数成员声明为静态的,静态成员函数即使在类对象不存在的情况下也能被调用

○ 静态VS普通

■ 静态成员函数无this指针,只能访问静态成员
■ 普通成员函数有this指针,可以访问类中任意成员

继承

引入目的:使得创建和维护一个应用程序更加容易,达到了重用代码功能 和提高执行效率的效果
派生类可以访问基类所有非私

公有继承
○ 基类:public protected private
○ 派生类:public protected private
保护继承
○ 基类:public protected private
○ 派生类:protected protected private
私有继承
○ 派生类:private private private

重载

同一作用域中某个函数和运算符指定多个定义

重载声明:前有在该作用域内声明过的函数/方法具有相同名称的声明,但参数列表和定义(实现)不相同
重载决策:当调用一个重载函数/运算符时,编译器通过把使用的参数类型和定义中的参数类型进行比较,选择最合适的

函数重载

○ 同一作用域内,声明几个功能类似的同名函数,但形式参数(参数个数,类型顺序)必须不同,不能仅仅通过返回类型不同来重载函数

运算符重载

○ 可重定义或者重载大部分c++内置运算符(这样能使用自定义类型运算符)

多态

运行时:继承和虚函数
编译时:函数和运算符重载

函数(virtual)

基类中某成员函数被声明为虚函数后,此虚函数可以在一个或者多个派生类中被重新定义

作用:为了方便使用多态特性;基本情况下基类本身生成对象是不合情理的

纯虚函数

○ 声明虚函数时被初始化为零的函数

函数VS重载函数

○ 派生类中重新定义基类的虚函数函数重载的另一种形式,虚函数在派生类中被重新定义时,其函数原型,返回类型,函数名称,参数个数都必须与基类中的原型完全相同
○ 普通重载函数,其函数的参数或者参数类型必须有所不同,返回类型可以不同

C++程序内存空间

stack栈

函数内部声明的所有变量都将占用栈内存(运行期间函数调用时参数的传递也在栈上)

heap堆

○ 程序未使用的内存,程序运行时可用于动态分配内存

new VS malloc

○ new无需指定内存块的大小;malloc需显式指出内存尺寸
○ new和delete是关键字,需要编译器;malloc和free是库函数,需要头文件
○ new分配后返回对象类型指针;malloc返回void
○ new失败显式bad-malloc异常;malloc失败返回void
○ c++允许重载new/delete;malloc 不允许

普通函数VS内联函数VS宏定义

普通函数调用时先去函数入口地址去执行函数体,执行完成后在回到函数调用地方继续
内联函数函数,但不用寻址;常有类型检查
宏定义不是函数,预处理器用复制宏代码的方式代替函数调用,省去了函数压栈退栈过程,无类型检查

数组指针VS指针数组

数组指针是专门指向数组的指针变量
指针数组指的是多个指针变量

结构体VS类

结构体是一种包含了具体不同数据类别的包装;认public;值类型(存储数据的值);用栈存储;无继承,多态
是反映现实事物的一种抽象;认private;引用类型(存储对实际数据的引用);用堆存储;有继承,多态

内存溢出VS内存泄漏

内存溢出就是不够用,申请时没有足够的内存空间供其使用
内存泄漏是退不掉,申请后无法释放内存空间

值传递 VS 指针传递 VS 引用传递(地址传递)

值传递中实参和形参位于不同地址,形参改变不会影响实参(实参先复制一次拷贝,把拷贝的内容复制给形参)
指针传递本质是值传递,传递地址值,形参存放实参值(对形参操作不影响实参)
地址传递中形参存放实参地址(对形参操作影响实参的值)

重载 VS 重写 VS 重定义

重载,同一作用域内,函数可以相同,但参数不能完全相同(函数重载不同函数
重写,子类定义一个父类及其相像的虚函数函数名和参数列表都相同
重定义,子类定义一个父类同名的函数(只关注函数名,与参数和返回类型都无关)

局部变量 VS 全局变量

局部变量存放在堆栈中;局部变量可以和全局变量重名
全局变量存放在静态数据库;引用一个已经定义过的全局变量可以选择引用头文件或external关键字


版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340