• 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. 友元

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

  • 相关阅读:
    基于Android的校园心理咨询系统的设计与实现
    m基于MATLAB的上行链路MIMO关键技术的研究与性能分析
    ASCII_Util.java
    AI时代新爬虫:网站自动转LLM数据,firecrawl深度玩法解读
    记录下Tesla V100s vmware EXTI 7.0 虚拟机直通显卡cuda、cudnn安装
    并发与并行,同步和异步,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang并发编程之GoroutineEP13
    国庆作业 day 2
    解决宿主机ssh连接ubuntu虚拟机报错的问题
    杰理之MIDI 乐谱解码运行步骤【篇】
    C#:实现BinarySearchTree二叉搜索树算法(附完整源码)
  • 原文地址:https://blog.csdn.net/Rinki123456/article/details/127460127