【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 指针默认是成员函数的第一个形参,编译器自动生成,你不能写出来。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java程序设计】【C00254】基于Springboot的java学习平台(有论文)

基于Springboot的java学习平台&#xff08;有论文&#xff09;&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的学习平台 本系统分为系统功能模块、管理员功能模块、教师功能模块以及学生功能模块。 系统功能模块&#xff1a;在平台…

LLM大模型常见问题解答(3)

简要描述下列概念在大语言模型中的作用 Transformer 架构Attention 机制预训练与微调过拟合和欠拟合 Transformer 架构 Transformer是一种基于自注意力机制的深度学习模型&#xff0c;它在论文“Attention Is All You Need”中首次提出。与此前流行的循环神经网络&#xff0…

第四节 zookeeper集群与分布式锁

目录 1. Zookeeper集群操作 1.1 客户端操作zk集群 1.2 模拟集群异常操作 1.3 curate客户端连接zookeeper集群 2. Zookeeper实战案例 2.1 创建项目引入依赖 2.2 获取zk客户端对象 2.3 常用API 2.4 客户端向服务端写入数据流程 2.5 服务器动态上下线、客户端动态监听 2…

力扣题目训练(8)

2024年2月1日力扣题目训练 2024年2月1日力扣题目训练404. 左叶子之和405. 数字转换为十六进制数409. 最长回文串116. 填充每个节点的下一个右侧节点指针120. 三角形最小路径和60. 排列序列 2024年2月1日力扣题目训练 2024年2月1日第八天编程训练&#xff0c;今天主要是进行一些…

AcWing 802. 区间和 离散化

文章目录 题目链接题目描述解题思路代码实现总结 题目链接 链接: AcWing 802. 区间和 题目描述 解题思路 离散化是一种常用的技巧&#xff0c;它能够将原始的连续数值转换为一组离散的值&#xff0c;从而简化问题的处理。在这段代码中&#xff0c;离散化的过程主要分为三个步…

探索Nginx:强大的开源Web服务器与反向代理

一、引言 随着互联网的飞速发展&#xff0c;Web服务器在现代技术架构中扮演着至关重要的角色。Nginx&#xff08;发音为“engine x”&#xff09;是一个高性能的HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP代理服务器。Nginx因其卓越的性能、稳定性和灵活性&…

02.数据结构

一、链表 作用&#xff1a;用于写邻接表&#xff1b; 邻接表作用&#xff1a;用于存储图或树&#xff1b; 1、用数组模拟单链表 #include<iostream> using namespace std;const int N 100010;// head 表示头结点的下标 // e[i] 表示结点i的值 // ne[i] 表示结点i的ne…

前端工程化面试题 | 08.精选前端工程化高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

DS Wannabe之5-AM Project: DS 30day int prep day14

Q1. What is Autoencoder? 自编码器是什么&#xff1f; 自编码器是一种特殊类型的神经网络&#xff0c;它通过无监督学习尝试复现其输入数据。它通常包含两部分&#xff1a;编码器和解码器。编码器压缩输入数据成为一个低维度的中间表示&#xff0c;解码器则从这个中间表示重…

CentOS 7.9安装Tesla M4驱动、CUDA和cuDNN

正文共&#xff1a;1333 字 21 图&#xff0c;预估阅读时间&#xff1a;2 分钟 上次我们在Windows上尝试用Tesla M4配置深度学习环境&#xff08;TensorFlow识别GPU难道就这么难吗&#xff1f;还是我的GPU有问题&#xff1f;&#xff09;&#xff0c;但是失败了。考虑到Windows…

BIO、NIO、Netty演化总结

关于BIO&#xff08;关于Java NIO的的思考-CSDN博客&#xff09;和NIO&#xff08;关于Java NIO的的思考-CSDN博客&#xff09;在之前的博客里面已经有详细的讲解&#xff0c;这里再总结一下最近学习netty源码的的心得体会 在之前的NIO博客中我们知道接受客户端连接和IO事件的…

Vulnhub靶机:hacksudo-ProximaCentauri

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;hacksudo-ProximaCentauri&#xff08;10.0.2.51&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://www.vulnhu…

算法学习——LeetCode力扣二叉树篇4

算法学习——LeetCode力扣二叉树篇4 222. 完全二叉树的节点个数 222. 完全二叉树的节点个数 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xf…

二叉树、堆和堆排序(优先队列)

前言&#xff1a; 本章会讲解二叉树及其一些相关练习题&#xff0c;和堆是什么。 二叉树&#xff1a; 二叉树的一些概念&#xff1a; 一棵二叉树是有限节点的集合&#xff0c;该集合可能为空。二叉树的特点是每一个节点最多有两个子树&#xff0c;即二叉树不存在度大于2的节点…

中科大计网学习记录笔记(十):P2P 应用

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…

全坚固平板EM-I12U,全新升级后的优质体验

平板终端机在户外勘探、制造业、畜牧业、银行金融行业当中都不是陌生的&#xff0c;能采集各种数据来转换成信息流向企业和行业的各个分支当中&#xff0c;在整个行业发展、社会推动上面都起着关键性作用&#xff0c;而平板终端机的升级也就意味着未来的这些行业发展会进入一个…

【51单片机】LED点阵屏(江科大)

9.1LED点阵屏 1.LED点阵屏介绍 LED点阵屏由若干个独立的LED组成,LED以矩阵的形式排列,以灯珠亮灭来显示文字、图片、视频等。 2.LED点阵屏工作原理 LED点阵屏的结构类似于数码管,只不过是数码管把每一列的像素以“8”字型排列而已。原理图如下 每一行的阳极连在一起,每一列…

C++ //练习 6.3 编写你自己的fact函数,上机检查是否正确。

C Primer&#xff08;第5版&#xff09; 练习 6.3 练习 6.3 编写你自己的fact函数&#xff0c;上机检查是否正确。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /********************************************************…

VMware虚拟机安装openEuler系统(二)(2024)

下面我们进行openEuler系统的一些简单配置。 1. 开启openEuler系统 在VMware Workstation Pro虚拟机软件中找到安装好的openEuler操作系统虚拟机并开启。 等待开启。 2. 安装配置 进入后选择第一个“Install openEuler 20.03-LTS”。 3. 选择系统语言 为虚拟机设置系统语言…

Unity学习笔记(零基础到就业)|Chapter02:C#基础

Unity学习笔记&#xff08;零基础到就业&#xff09;&#xff5c;Chapter02:C#基础 前言一、复杂数据&#xff08;变量&#xff09;类型part01&#xff1a;枚举数组1.特点2.枚举&#xff08;1&#xff09;基本概念&#xff08;2&#xff09;申明枚举变量&#xff08;3&#xff…