概述
1. 什么是面向过程?什么是面向对象?
C语言是面向过程的,关注的是过程,分析出解题过程的步骤,调用函数来实现。
C++是基于面向对象的,关注的是对象,将一件事物划分成不同的对象,通过不同对象之间相互交互完成
2. 面向对象的三大特性
面向对象的三大特性分别是:封装、继承、多态
2.1 封装
什么是封装?
隐藏了对象的实现细节和属性,仅对外公开接口来和对象进行交互,封装其实是一种对于类的管理,可以让用户更加方便的管理类。
3. 八大默认成员函数
- 构造函数
- 析构函数
- 拷贝构造函数
- 赋值重载函数
- &重载函数
- ->重载函数
- 移动构造函数
- 移动赋值函数
其中第7、8成员函数是在C++11中引入了右值引用后新添加的默认成员函数
注意:
1. 构造函数为什么不能是虚函数?
因为派生类在生成对象时会自动调用基类的构造函数,如果基类的构造函数是虚函数,则不会调用基类的构造函数,那么无法生成基类对象。
2. 析构函数可以是虚函数吗?
析构函数可以是虚函数,由于编译器会将基类和派生类的析构函数最后都转换成destructer,因此如果基类的析构函数是虚函数,则派生类会完成覆盖。
3. 什么情况下会默认生成默认构造函数? 什么情况下会默认生成移动构造函数?
当我们没有显示的写构造函数时,会默认生成构造函数。
当我们没有显示的写构造函数,拷贝构造函数和赋值重载函数时,会默认生成移动构造函数。
4. 默认函数的初始化列表
对于需要初始化的变量,比如引用类型,可以完成真正意义上的初始化。
初始化列表上的初始化顺序和写的顺序无法,与类中定义的顺序有关。
4. 对象实例化
类其实就类似是一个图纸没有占用任何的空间,而对象的创建就是我们所说的实例化。
4.1 对象的大小
这里就要关注一个对象中存储了什么?
类中只存储了成员变量,成员函数都存储在代码段中。
因此对于对象大小的计算就类似于对于结构体大小的计算,涉及到了对齐问题。
那么如果一个类定义时没有任何的成员变量,那么创建一个对象的大小是多少?
如果按上述说法来计算,其大小应该是0,但编译器为了标识它是存在过的,因此给予空类对象一个字节的大小。
5. this指针
5.1 什么是this指针
对于一个类生成的不同对象,调用其共有的函数,那么是如何区分其函数传入变量不同的呢?
C++引入了this指针来区分,C++给非静态的成员函数都引入了this指针的概念,当该指针指向对象时,所有对成员变量的操作都是通过该指针来访问。
5.2 this指针的特性
- this指针是常指针。
- this指针只能在成员函数内部使用
- 因为需要频繁调用,this指针一般存储在寄存器中
6. 运算符重载
什么运算符是不能够被重载的呢?
1. 带.的运算符是不能被重载的 1 .* 2 :: 3 ?: 4
2. sizeof运算符是不能被重载的
运算符重载的意义是什么?
为了提高代码的可读性,
7. static关键字
- 被static关键字修饰的成员变量是所有对象公用的
- 静态成员变量必须在类外进行定义,类中的成员都是声明
- 类的静态成员可以通过类名::成员名来进行访问或者对象.静态成员
- 静态成员中没有this指针
8. 友元
友元是单向的,是不可传递的。
最后
以上就是隐形鸡为你收集整理的C++复习第二天:类与对象的全部内容,希望文章能够帮你解决C++复习第二天:类与对象所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复