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

2023-11-13

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++复习第二天:类与对象 的相关文章

随机推荐

  • esp32与python-opencv的联动(micropython固件)

    开发环境 Thonny python 硬件要求 esp32cam 实现思路 将esp32cam拍摄的图片通过网络协议传到电脑进行处理 下位机代码 import camera import socket import network impo
  • 去掉图片黑背景输出为透明png(算法和工具)

    有时候你得到的图片不是透明的png而是加了黑背景的图 可能是 jpg gif png等格式的图 例如一个粒子效果的图 多好的粒子效果 可惜它有黑背景 不处理一下 不好用 经过移除黑背景处理为png后 变为 这时候这个效果图片就可以方便的使用
  • 将指定文件夹中的图片随机均匀分为5份,并将每份图片保存到指定的文件夹

    以下是Python示例代码 可用于将指定文件夹中的图片随机均匀分为5份 并将每份图片保存到指定的文件夹 import os import random import shutil 设置来源文件夹和目标文件夹的路径 src folder pa
  • Ubuntu16_18建立返回桌面、显示桌面的快捷图标的特殊方法

    一般windows系统任务栏上都有 返回桌面 的按钮 Ubuntu也有类似的任务栏 或者叫启动器 但是没有这个 显示桌面 的按钮 如果想加一个怎么实现呢 有人可能说了按ctrl super d就可以了 是的没错 不过这是按键不是快捷图标 有
  • java自动化测试-UI(APP)

    环境搭建 下载android sdk windows appium与Appium windows 夜神模拟器 雷电模拟器 genymotion 下载 android sdk下载 官网地址 https developer android go
  • Docker启动失败报错Failed to start Docker Application Container Engine解决方案

    Docker启动失败报错Failed to start Docker Application Container Engine解决方案 天涯人6的博客 CSDN博客
  • stm32f407-ros-serial-can-json-mqtt

    ros coer rosserial 桥接 qt UI 获取收发数据 操作接口 类 发布 订阅 接口 类 发布 发布接口 ros 转发功能nh ros read 读取上位机 订阅数据nh ros serialread 读取 单片机串口数据n
  • hp服务器基本系统设备驱动,hp 服务器 设置硬盘驱动

    hp 服务器 设置硬盘驱动 内容精选 换一换 云备份 Cloud Backup and Recovery CBR 可以为云服务器 云硬盘提供简单易用的备份服务 当发生病毒入侵 人为误删除 软硬件故障等事件时 可将数据恢复到任意备份点 云备份
  • Gradle脚本基础全攻略

    http blog csdn net yanbober article details 49314255 t15 目录 背景 Gradle DSL基础 2 1 构建脚本Build scriptProject 2 2 初始化脚本Init sc
  • Error processing condition on org.springframework.boot.autoconfigure.context.PropertyPlaceholderAuto

    Error processing condition on org springframework boot autoconfigure context PropertyPlaceholderAutoConfiguration proper
  • 基于Python+Django的项目实战-招聘数据分析可视化系统(附源码+论文)

    大家好 我是职场程序猿 感谢您阅读本文 欢迎一键三连哦 当前专栏 基于Python的毕业设计 精彩专栏推荐 微信小程序毕业设计 安卓app毕业设计 Java毕业设计 招聘数据分析可视化系统 django 演示 源码及论文下载地址 https
  • 【mcuclub】矩阵键盘

    1 实物图 2 原理图 3 基本原理 使用8个I O口来进行16个按键的控制读取 用4条I O线作为行线 4条I O线作为列线组成键盘 当某个按键按下时 进行行列扫描 从而判断是第几行第几列的按键 进而进行整体按键值的确定 4 优点 使用8
  • Stephen Wolfram

    斯蒂芬 沃尔夫勒姆 Stephen Wolfram 1959年 物理学家 数学家 电脑工程师和商人 作为程序开发员 他是数学软件Mathematica的发明者之一 作为商人 他是Wolfram Research公司的创立者和首席执行官 在学
  • 基础知识汇总(python)

    1 注释 单行注释 多行注释 2 换行 total applePrice orangePrice milkPrice 3 变量 111 赋值给了 a a 111 变量名规则 字母 数字 下划线组成 数字不可以开头 不能关键字重用 变量名必须
  • 腾讯云分布式数据库可用性系统实践

    欢迎大家前往腾讯云社区 获取更多腾讯海量技术实践干货哦 在分布式环境当中 总是会遇到诸如 主机宕机 或 网络故障 等各种影响系统可用性的情况发生 轻则会导致投诉 重则导致企业核心数据的丢失 影响企业业绩和商誉 而如何确保分布式系统运行正常
  • 【自用】微信小程序体验版无法加载数据、无法调用接口

    一 原因 没有打开微信小程序调试模式 二 解决办法 1 进入小程序 点击右上角的3个点儿 2 点击右下角开发调试 3 点击 打开调试 4 点击 前往体验版 重新进行测试 5 问题解决 右下角出现角标 重新进行测试吧
  • QT 中信号与槽connect 放在哪个位置

    在使用QT 的时候 就一直犯嘀咕 两个对象之间使用信号与槽链接的时候 应该把connect 放在哪个位置呢 对象 A 对象 B两个对象 把connect 放在A 对象里还是放在B 对象里呢 在一次项目里面我突然自己领悟了一个方式 C 对象调
  • 大数据——Hive基础

    Hive基础 什么是Hive Hive的优势和特点 Hive的发展里程碑和主流版本 Hive与MapReduce Hive的基本架构 Hive元数据管理 Hive体系架构 Hive操作 Hive Interface 命令窗口模式 1 Hiv
  • 鹤舞云天服务器稳定,《御剑红尘》手游新服“鹤舞云天”即将开启!

    亲爱的少主们 一念入微梦 月下与君酌 桃漫枝满头 缘聚玄天处 伴随着飘渺的莺莺婉歌 让我们一同走进清梦星河的梦境深处 御剑红尘 手游计划于12月19日10 00开启全新一组服务器 鹤舞云天 吹笙玄鹤舞 长望碧云天 届时欢迎各位探险家前来进驻
  • C++复习第二天:类与对象

    1 什么是面向过程 什么是面向对象 C语言是面向过程的 关注的是过程 分析出解题过程的步骤 调用函数来实现 C 是基于面向对象的 关注的是对象 将一件事物划分成不同的对象 通过不同对象之间相互交互完成 2 面向对象的三大特性 面向对象的三大