C++复习第二天:类与对象

1. 什么是面向过程?什么是面向对象?

C语言是面向过程的,关注的是过程,分析出解题过程的步骤,调用函数来实现。

C++是基于面向对象的,关注的是对象,将一件事物划分成不同的对象,通过不同对象之间相互交互完成

2. 面向对象的三大特性

面向对象的三大特性分别是:封装、继承、多态

2.1 封装

什么是封装?

隐藏了对象的实现细节和属性,仅对外公开接口来和对象进行交互,封装其实是一种对于类的管理,可以让用户更加方便的管理类。

3. 八大默认成员函数

  1. 构造函数
  2. 析构函数
  3. 拷贝构造函数
  4. 赋值重载函数
  5. &重载函数
  6. ->重载函数
  7. 移动构造函数
  8. 移动赋值函数

其中第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指针的特性

  1. this指针是常指针。
  2. this指针只能在成员函数内部使用
  3. 因为需要频繁调用,this指针一般存储在寄存器中

6. 运算符重载

什么运算符是不能够被重载的呢?

1. 带.的运算符是不能被重载的 1 .* 2 :: 3 ?:  4 

2. sizeof运算符是不能被重载的

运算符重载的意义是什么?

为了提高代码的可读性,

7. static关键字

  1. 被static关键字修饰的成员变量是所有对象公用的
  2. 静态成员变量必须在类外进行定义,类中的成员都是声明
  3. 类的静态成员可以通过类名::成员名来进行访问或者对象.静态成员
  4. 静态成员中没有this指针

8. 友元

友元是单向的,是不可传递的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值