ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++复习

2022-03-20 17:02:58  阅读:146  来源: 互联网

标签:复习 继承 函数 基类 C++ 派生类 成员 构造函数


1、面向对象编程的特性

抽象、封装和数据隐藏、多态、继承、代码的可重用性

2、过程性编程

面向过程编程:首先要考虑遵循的步骤,然后考虑如何表示这些数据。并不需要程序一直运行,用户可能希望能够将数据存储在一个文件中,然后从这个文件中读取数据。
面向对象编程:首先考虑数据,不仅考虑如何表示数据,还要考虑如何使用数据。

例子:面向过程–蛋炒饭,一起抄;面向对象–盖饭,配料和饭分开做,做好再盖上去

3、类是用户定义类型的定义,类规范由两个部分组成:

类声明:以数据成员的方式描述数据部分,以成员函数的方式描述共有接口

类方法定义:描述如何实现类成员函数。

4、内联函数

其定义位于类声明中的函数自动成为内联函数,也可以在类声明外定义内联函数,但要加上关键字inline

5、类构造函数

专门用于构造新对象,将值赋给它们的数据成员。构造函数没有返回值,构造函数的参数名不能与类成员的相同

6、析构函数

完成清理操作,一般释放内存

7、this指针,当成员函数涉及到两个对象时,在这种情况下可能需要this指针,this指针指向当前调用对象,指向的是地址

8、类如何实现抽象、封装、和数据隐藏

抽象: 类表示人们可以使用方法的共有接口对类对象执行的操作

数据隐藏: 类的数据成员是私有的,只能通过成员函数来访问这些数据

封装: 实现的具体细节都是隐藏的

9、默认构造函数是没有参数值或者所有参数值都有默认值的构造函数。拥有默认构造函数后,可以声明对象,而不初始化它。

10、运算符重载是一种形式的c++多态

11、友元函数

通过让函数成为类的友元,可以赋值该函数与类的成员函数相同的权限,即可以访问私有成员。友元函数看作类的扩展接口的组成部分,另外只有类声明决定哪一个函数是友元函数,因此类声明仍然控制了哪些函数可以访问私有数据。没有违反数据隐藏的原则。

12、转换函数用于强制类型转换,必须是类方法,不能指定返回类型,不能有参数

13、复制构造函数:用于将一个对象复制到新创建的对象中

14、默认复制构造函数:将逐个赋值分静态成员,成员赋值也称为浅拷贝

15、如果类中包含这样的静态成员,即其值将在新对象被创建时发生变化,则应该提供一个显式复制构造函数来处理计数问题

16、显式复制构造函数:也叫深度复制(深拷贝)

  • 深拷贝和浅拷贝的区别:

浅拷贝复制指针,深拷贝另开辟一块内存空间并将所有数据复制过去

17、类继承

能够从已有的类派生出新的类,而派生类继承了原有类的特征,包括方法。派生类不能直接访问基类的私有成员,必须通过基类的方法进行访问

18、c++有三种继承方式:

  • 公有继承:is-a关系
  • 保护继承
  • 私有继承
  • 若继承方式是public,基类成员在派生类中的访问权限保持不变,也就是说,基类中的成员访问权限,在派生类中仍然保持原来的访问权限;
  • 若继承方式是private,基类所有成员在派生类中的访问权限都会变为私有(private)权限;
  • 若继承方式是protected,基类的共有成员和保护成员在派生类中的访问权限都会变为保护(protected)权限,私有成员在派生类中的访问权限仍然是私有(private)权限。

19、多态公有继承

同一个方法在派生类和基类中的行为不同。方法的行为应却决于调用方法的对象。

有两种方法可用于实现多态共有继承:

  • 在派生类中重新定义基类的方法(重载
  • 使用虚方法。如果没有使用虚方法,程序将根据引用类型或指针类型选择方法,如果使用了虚方法,程序将根据引用或指针指向的对象的类型来选择方法

20、虚析构函数:确保释放派生对象时,按正确的顺序调用析构函数(先派生类后基类)。

21、静态联编:在编译过程中进行联编

动态联编:编译器必须生成能够在程序运行时选择正确的虚方法的代码

该过程如何实现?

是通过虚函数表来实现的。含有虚函数的类的对象均会多存储一个4字节的虚函数表地址,默认指向其对象所属类的虚函数表,在程序运行时,通过该指针找到对应虚函数表中的函数,从而实现多态。

22、为什么不摒弃静态联编
因为要考虑效率。并不是所有的派生类都重新定义基类的方法,也不需要动态联编,这种情况下静态联编更合理。

23、构造函数不能是虚函数,这是为了按正确的顺序调用构造函数。

如果构造函数是虚函数,创建派生类对象时,将调用派生类的构造函数,而不是基类的构造函数。然后派生类的构造函数将使用基类的一个构造函数,这种顺序不同于继承机制。

友元函数不能是虚函数,因为虚函数必须是成员函数,友元函数不是成员函数

24、纯虚函数:类声明时函数结尾处为"=0",没有函数体{}

抽象基类:类声明中包含纯虚函数。抽象基类将不能创建对象,只能用作基类。

25、派生类从基类那里继承了什么?
继承了公有成员、保护成员、私有成员,但是私有成员不能直接访问

26、派生类不能从基类继承什么?
不能继承构造函数、析构函数、赋值运算符和友元

27、如果派生类没有添加任何数据成员,它是否需要构造函数?
需要,每个类必须有构造函数

28、在什么情况下,派生类需要定义赋值运算符?
如果派生类构造函数使用new运算符来初始化类的指针成员,则应定义一个赋值运算符。更普遍的说,如果对于派生类成员来说,默认赋值不正确,则应定义赋值运算符。

29、为什么按引用传递对象比按值传递对象的效率高
按引用传递对象,可以确保函数从虚函数收益,另外,按引用传递对象可以节省内存空间。按值传递对象的主要优点在于保护原始数据,但是可以将引用作为const类型传递,也可以保证原始数据不被修改。

30、使用explict关闭隐式转换

31、关键字template$<class T1, class T2, …>$来定义一个模板

  • 函数模板可以重载,只要形参表或类型参数表不同即可

  • 模板的作用:实现代码的可重用性,方便实现几个很相似的函数。实际上在编译时,模板会生成相似但不同的函数(实例化,形参类型替换成实参类型)

  • 函数模板和函数的次序:先找完全匹配的普通函数,在找完全匹配的模板函数,再找自动类型转换后匹配的普通函数。注意:函数模板不进行自动类型转换

32、虚基类的概念

虚基类是为了防止多重继承时,当两条继承类有相同的祖先时,则类中将包含祖先成员的两个拷贝。

参考:https://github.com/Yorkking/SYSU-CS-Postgraduate-Entrance-Examination

标签:复习,继承,函数,基类,C++,派生类,成员,构造函数
来源: https://blog.csdn.net/qq_36104681/article/details/123614348

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有