【C++ 02】类和对象 1:初识类和对象

文章目录

  • 🌈 Ⅰ 面向对象介绍
  • 🌈 Ⅱ 类的引入
  • 🌈 Ⅲ 类的定义格式
    • 1. 声明和定义不分离
    • 2. 声明和定义分离
  • 🌈 Ⅳ 类的访问限定符
  • 🌈 Ⅴ 类的作用域
  • 🌈 Ⅵ 类的实例化
  • 🌈 Ⅶ this 指针

🌈 Ⅰ 面向对象介绍

  • C++ 关注的是对象,将一个事件拆分成不同的对象,靠对象之间的交互来完成该事件。
  • 例如:送外卖这整个事件可以拆分成商家、骑手、客户等多个对象,送外卖这整个事件就靠这些个对象来完成。

🌈 Ⅱ 类的引入

  • C++ 的结构体比 C语言 的要厉害那么一些,在 C++ 的结构体中可以定义函数。

在这里插入图片描述

🌈 Ⅲ 类的定义格式

  • 虽然 struct 也能够完成类的工作,但是分工还是要更明确些比较好,C++ 用 class 来作为定义类的关键字。struct 就只完成 C语言 交给它的本质工作就够了。

定义语法

class 类名
{// 类体:由成员函数和成员变量组成
};

1. 声明和定义不分离

  • 声明和定义都放在类体中,成员函数如果在类中定义,编译器就有可能将它当作内联函数处理。

在这里插入图片描述

2. 声明和定义分离

  • 类声明放在 .h 文件,成员函数定义在 .cpp 文件
  • 这种格式的的成员函数在定义时成员函数名前需要加 类名::

在这里插入图片描述

🌈 Ⅳ 类的访问限定符

1. 访问限定符说明

访问限定符限定说明
public公有修饰的成员在类外 可以 直接被访问
protected保护修饰的成员在类外 不能 直接被访问
private私有修饰的成员在类外 不能 直接被访问

2. 访问限定符注意事项

  1. 访问权限的作用域从该访问限定符出现的位置开始知道下一个访问限定符出现时为止

在这里插入图片描述

  1. 如果后面没有访问限定符,作用域就到 } 为止。也就是该访问限定符一直作用到类结束为止。

在这里插入图片描述

  1. class 的默认访问权限为 private,struct 的为 public (struct 要兼容 C语言)。

3. 成员函数和成员变量的权限

  • C++ 不希望能够直接访问和修改成员变量,所以一般是会将类中的成员变量设置成 private。而成员函数设置成 public。

在这里插入图片描述

🌈 Ⅴ 类的作用域

  • 类定义了一个新的作用域,类的所有成员都在类的作用域中。在类外定义成员时,需要使用与 ==域用限定符 ::==指明该成员属于哪个类域。
class date
{
public:void Init(int year, int month, int day);
private:int _year;int _month;int _day;
};// 如果不指明 Init 函数的类域是 date,那么就无法使用 date 类的成员变量
// 因为这些成员变量是无法在局部域和全局域找到的,自然会报错了
void date::Init(int year, int month, int day)
{_year = year;_month = month;_day = day;
}

在这里插入图片描述

🌈 Ⅵ 类的实例化

根据类的类型创建对象 (定义变量) 的过程,称为类的实例化

  1. 类是对对象进行描述的,是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间。
    • 就像 struct 结构体一样,定义一个结构体不会占用任何空间,但是根据定义的这个结构体来创建对象 (变量) 就开辟的空间了。
  2. 一个类可以实例化出多个对象,实例化出的对象占用实际的存储空间,用来存储类的成员变量

在这里插入图片描述

🌈 Ⅶ this 指针

  • 在调用成员函数时,如果不想特殊化成员变量却又想直接调用成员变量,可以使用 this 指针,this 表示调用的变量为本类中的成员变量。
class date
{
public:// this 指针指向的是本类的成员变量void Init(int year, int month, int day){this->year = year;this->month = month;this->day = day;}
private:int year;int month;int day;
};

this 指针的本质

  • 在类中定义的函数实际上都会有一个隐藏的 this 指针,对象在调用类中的某个函数时,会顺带将对象的地址传给该函数。因此 this 指针才能够调用对象内的成员变量。

在这里插入图片描述

  • 将对象的地址传过去之后,公用的函数才能调用对象内私有的成员变量。
  • 每个对象内的成员变量都是独立的,成员函数是公有的
class date
{
public:void Init(int year, int month, int day){_year = year;_month = month;_day = day;}void Print(){cout << _year << "-" << _month << "-" << _day << endl;}private:int _year;int _month;int _day;
};

在这里插入图片描述

this 指针不能显示写

  • this 指针默认是成员函数的第一个形参,编译器自动生成,你不能写出来。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/467149.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零基础学python之高级编程(3)---面向对象多态与封装(含有代码示例)

面向对象多态与封装 文章目录 面向对象多态与封装前言一、多态方法重写&#xff08;Overriding&#xff09;方法重载(Overloading)抽象基类和接口&#xff08;Abstract Base Classes and Interfaces&#xff09; 二、封装私有变量和私有方法属性装饰器(property) 和 getter和se…

MySQL数据库-索引概念及其数据结构、覆盖索引与回表查询关联、超大分页解决思路

索引是帮助mysql高效获取数据的数据结构,主要用来提高检索的效率,降低数据库的IO成本(输入输出成本&#xff08;Input-Output Cost&#xff09;),同时通过索引对数据进行排序也能降低数据排序的成本,降低了CPU的消耗。 Mysql的默认存储引擎InnoDB&#xff0c;InnoDB采用的B树的…

算法刷题:盛水最多的容器

盛水最多的容器 .习题链接题目题目解析算法原理我的答案 . 习题链接 盛水最多的容器 题目 题目解析 VH*W h为左右两边低的一边,w为左右两边之间的距离 算法原理 定义两个指针 left0,rightn-1; left从左往右对数组进行遍历,right从右往左进行遍历 遍历的过程中,每一次都需要…

Web 扫描神器:Gobuster 保姆级教程(附链接)

一、介绍 Gobuster 是一款用于目录和文件枚举的开源工具。它主要用于在Web应用程序或网站上查找隐藏的目录和文件&#xff0c;从而进行信息收集或渗透测试。以下是 Gobuster 的一些主要特点和功能&#xff1a; 快速且高效&#xff1a; Gobuster 被设计为快速、高效的工具&…

3月第一批次❗教资认定流程简易版来啦

&#x1f4dd;材料准备 1、身份证 2、户口本/学生证/居住证/毕业证 3、考试合格证明(免试人员需要师范生职业能力证书) 4、普通话证书 5、学历证书或认证报告 6、近期一寸白底证件照 7、有效期内体检报告 8、个人承诺书(网上签署) 网上申报 1、上传个人承诺书 2、校验普通话证书…

【图论】【树形dp】【深度优先搜索】2538. 最大价值和与最小价值和的差值

作者推荐 【深度优先搜索】【树】【图论】2973. 树中每个节点放置的金币数目 本文涉及知识点 深度优先搜索 LeetCode2538. 最大价值和与最小价值和的差值 给你一个 n 个节点的无向无根图&#xff0c;节点编号为 0 到 n - 1 。给你一个整数 n 和一个长度为 n - 1 的二维整数…

算法沉淀——分治算法(leetcode真题剖析)

算法沉淀——分治算法 快排思想01.颜色分类02.排序数组03.数组中的第K个最大元素04.库存管理 III 归并思想01.排序数组02.交易逆序对的总数03.计算右侧小于当前元素的个数04.翻转对 分治算法是一种解决问题的算法范式&#xff0c;其核心思想是将一个大问题分解成若干个小问题&a…

去除vue自带的边距

使用vue时发现总有去不掉的外边距&#xff0c;在index.vue里面怎样设置样式都不管用 查阅资料后发现要在vue项目自带的index.html文件内添加下面的样式代码才行 <style>*{margin: 0;padding: 0;}body,html{margin: 0;padding: 0;} </style>

揭秘外观模式:简化复杂系统的关键设计策略

前言 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它隐藏了系统的复杂性&#xff0c;并向客户端提供了一个可以访问系统的接口。这种类型的设计模式向现有的系统添加一个接口&#xff0c;来隐藏系统的复杂性。这种模式涉及到一个单一的类…

全国计算机技术与软件专业技术资格(水平)考试软考中级高级报名步骤

第一步&#xff1a; 1、登陆全国的计算机网上报名平台 http://bm.ruankao.org.cn/sign/welcome 根据自己所在地区&#xff0c;选择报考城市入口&#xff08;例如&#xff1a;北京考区考生&#xff0c;直接选择北京就 可以&#xff09; 第二步&#xff1a;用户登录 1、已有…

数据湖的整体思路

湖本质上是一个集中化&#xff0c;中心化的&#xff0c;一体化的存储技术&#xff0c;并且在其之上追求技术架构的统一化&#xff0c;如流批一体&#xff0c;服务分析一体化。 当数据湖成为中心&#xff0c;那么就可以围湖而建“数据服务环”&#xff0c;环上的服务包括了数仓、…

微服务多级缓存

多级缓存 1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后&#xff0c;先查询Redis&#xff0c;如果未命中则查询数据库&#xff0c;如图&#xff1a; 存在下面的问题&#xff1a; •请求要经过Tomcat处理&#xff0c;Tomcat的性能成为整个系统的瓶颈 •Redis缓存…