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

news2025/1/21 4:56:01

文章目录

  • 🌈 Ⅰ 面向对象介绍
  • 🌈 Ⅱ 类的引入
  • 🌈 Ⅲ 类的定义格式
    • 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.coloradmin.cn/o/1446967.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

17 ABCD数码管显示与动态扫描原理

1. 驱动八位数码管循环点亮 1.1 数码管结构图 数码管有两种结构&#xff0c;共阴极和共阳极&#xff0c;ACX720板上的是共阳极数码管&#xff0c;低电平点亮。 1.2 三位数码管等效电路图 为了节约I/O接口&#xff0c;各个数码管的各段发光管被连在一起&#xff0c;通过sel端…

【c++基础】国王的魔镜

说明 国王有一个魔镜&#xff0c;可以把任何接触镜面的东西变成原来的两倍——只是&#xff0c;因为是镜子嘛&#xff0c;增加的那部分是反的。 比如一条项链&#xff0c;我们用AB来表示&#xff0c;不同的字母表示不同颜色的珍珠。如果把B端接触镜面的话&#xff0c;魔镜会把…

LeetCode.145. 二叉树的后序遍历

题目 145. 二叉树的后序遍历 分析 上篇文章我们讲了前序遍历&#xff0c;这道题目是后序遍历。 首先要知道二叉树的后序遍历是什么&#xff1f;【左 右 根】 然后利用递归的思想&#xff0c;就可以得到这道题的答案&#xff0c;任何的递归都可以采用 栈 的结构来实现&#…

Vulnhub靶机:DC2

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;DC2&#xff08;10.0.2.55&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/dc-2,311/…

如何在 Ubuntu 上安装 ONLYOFFICE 文档 8.0

通过使用社区版&#xff0c;您有能力在您自己的服务器上部署 ONLYOFFICE 文档&#xff0c;从而使在线编辑器与 ​​ONLYOFFICE 协作平台​​​或​​其他热门系统​​进行无缝集成。 ONLYOFFICE 文档是什么 ONLYOFFICE 文档是一款全面的在线办公工具&#xff0c;提供了文本文档…

前端 > JS 笔试题面试考题(21-25)

简述请看下面的代码片段并回答以下问题 &#xff1f; for (var i 0; i< 5; i){var btn document.createElement(button);btn.appendChild(document.createTextNode(Button i));btn.addEventListener(click, function(){ console.log(${i} );});document.body.appendChild…

侧信道攻击是什么

侧信道攻击是什么? 侧信道攻击是一种利用系统的物理实现或实现的特定属性来获取信息的攻击方式。这些攻击利用了系统在执行特定操作时产生的信息泄漏&#xff0c;而不是直接攻击系统的计算或加密算法。侧信道攻击通常利用系统的功耗、电磁辐射、时间延迟等物理特性进行攻击&a…

【运维测试】测试理论+工具总结笔记第1篇:测试理论的主要内容(已分享,附代码)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论测试理论测试工具相关知识。Python测试理论的主要内容&#xff0c;掌握软件测试的基本流程&#xff0c;知道软件测试的V和W模型的优缺点&#xff0c;掌握测试用例设计的要素&#xff0c;掌握等价类划分法、边界值法、因…

【C语言期末项目-通讯录】-升级可动态申请内存版(手把手详细过程,期末评分A+的项目,答辩辅助神博文,建议三连点赞收藏)

目录 ​编辑 前言&#xff1a; 1.项目功能需求分析 2.文件框架说明 3.程序主框架实现 4.创建联系人结构体类型和通讯录结构体类型 4.1创建通讯录 5.程序功能实现--封装功能函数实现不同功能 5.1通讯录初始化 5.2增加联系人 5.3显示所有联系人的信息 5.4删除指定…

COMSOL方法编辑器中产生随机数(可控制随机种子)

简介 COMSOL二次开发主要在方法编辑器中进行&#xff0c;编程语言为Java。有时需要产生随机数&#xff08;比如随机生成一些球体&#xff09;&#xff0c;方法编辑器中已经存在Math.random()可直接使用。 但是&#xff0c;对于某些特殊情况&#xff0c;我希望每次运行代码产生…

最新Burp Suite入门讲解

Burp Suite的安装 Burp Suite是一款集成化的渗透测试工具&#xff0c;包含了很多功能&#xff0c;可以帮助我们高效地完成对Web应用程序的渗透测试和安全检测。 Burp Suite由Java语言编写&#xff0c;Java自身的跨平台性使我们能更方便地学习和使用这款软件。不像其他自动化测…

使用python绘制可视化的欧拉公式三维曲线图

欧拉公式应用非常广泛&#xff0c;它在研究交流电、信号分析、量子力学、极坐标切换、求反常积分以及研究任何圆周运动等方面都有着重要的应用&#xff0c;它建立了复数、自然对数、圆周率等重要数学常量之间的关系&#xff0c;描述了复数在极坐标和笛卡尔坐标之间的转换。公式…

本地Tomcat网页搭建结合Cpolar内网穿透实现公网访问

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 1.前言2.本地Tomcat网页搭建2.1 Tomcat安装2.2 配置环境…

闲来无事,写几个好看的产品宣传界面,希望您喜欢

闲来无事&#xff0c;再写几个产品宣传页 宣传页面一&#xff1a; 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&…

QT:实现图片选择器

一、效果图 二、用到的类 qApp&#xff1a;可以快速获取到项目目录位置。 QSettings &#xff1a;编写config文件&#xff0c;记录上次打开图片的位置&#xff0c;下次打开图片会从上次的位置查找图片。 QPixmap&#xff1a;用于图片的缩放&#xff0c;防止图片过小&#xff0…

学习Python需要准备什么?BoBo仔为您指点明经~~~

前言 大家好&#xff01;我是bobo仔&#xff0c;欢迎来阅读我的文章。我的这篇文章是专门为Python新手筹备的&#xff0c;大家一定要好好阅读&#xff0c;做好每一步&#xff0c;完成每一节。 【注&#xff1a;部分内容为作者见解、发现&#xff0c;如有版权侵袭或是信息错误…

kali系统概述、nmap扫描应用、john破解密码、抓包概述、以太网帧结构、抓包应用、wireshark应用、nginx安全加固、Linux系统加固

目录 kali nmap扫描 使用john破解密码 抓包 封装与解封装 网络层数据包结构 TCP头部结构​编辑 UDP头部结构 实施抓包 安全加固 nginx安全 防止缓冲区溢出 Linux加固 kali 实际上它就是一个预安装了很多安全工具的Debian Linux [rootmyhost ~]# kali resetkali …

BUUCTF-Real-[Jupyter]notebook-rce

1、简介 Jupyter Notebook&#xff08;此前被称为 IPython notebook&#xff09;是一个交互式笔记本&#xff0c;支持运行 40 多种编程语言。 如果管理员未为Jupyter Notebook配置密码&#xff0c;将导致未授权访问漏洞&#xff0c;游客可在其中创建一个console并执行任意Pytho…

Java中“==”和equals方法的区别

目录 一、“”举例 二、equals举例 区别如下&#xff1a; &#xff08;1&#xff09;“”既可以用在基本数据类型&#xff0c;也可以用在引用数据类型&#xff1b;如果用在基本数据类型上&#xff0c;那么比较时比较的是具体的值&#xff0c;如果用在引用数据类型&#xff0c…

Stable Diffusion 模型下载:majicMIX reverie 麦橘梦幻

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十