新旅程:类与对象的魔法课堂

🎉🎉🎉欢迎莅临我的博客空间,我是池央,一个对C++和数据结构怀有无限热忱的探索者。🙌
🌸🌸🌸这里是我分享C/C++编程、数据结构应用的乐园✨
🎈🎈🎈期待与你一同在编程的海洋中遨游,探索未知的技术奥秘💞

📝专栏指路:

📘【C++】专栏:深入解析C++的奥秘,分享编程技巧与实践。
📘【数据结构】专栏:探索数据结构的魅力,助你提升编程能力。

8345dda4516e46e1b64192fac99cd278.gif

读者哥哥,姐姐是好人~

来和可莉一起学习吧~

1.面向过程和面向对象初步认识

1.1C语言是面向过程

关注的是 过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
就拿洗衣服举例:洗好衣服要经过下面几个过程
86a973dc74bc44a8a977c86e31471f2d.png

 

1.2C++是基于面向对象

关注的是 对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。
在C++中洗衣服这件事是被这样看待的:
对象:人、衣服、洗衣粉、洗衣机

整个洗衣服的过程:人将衣服放进洗衣机、倒入洗衣粉,启动洗衣机,洗衣机就会完成洗衣过程并且甩干

整个过程主要是:人、衣服、洗衣粉、洗衣机四个对象之间交互完成的,人不需要关新洗衣机具体是如何洗衣服的,是如何甩干的

5e75ce8ebeb84fcdaec80678f287743f.png

 

2.类的引入

在C语言中, struct结构体类型中,只能 定义变量;C++兼容C中struct的用法,在此基础上C++在结构体内部还可以 定义函数,也可以 嵌套定义结构体,C++升级struct成了类,而在C++中类更喜欢用关键字 class
  • 类:在编程中,类是一个模板或蓝图,它描述了具有相同属性和方法的对象的集合。简单来说,类就是定义对象的模板。
  • 对象:对象是类的实例。当你使用类来创建一个新的实体时,你就创建了一个对象。这个对象具有类定义的属性和方法。

3.类的定义

class className
{
// 类体:由成员函数和成员变量组成
};  // 一定要注意后面的分号
(1)ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分 号不能省略。
(2)类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者
成员函数。
(3)类的两种定义方式:
1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内
联函数处理。(想了解更多与内联函数有关的请点击: 内联函数)
示例:
f0582d84af224e5b9822d8ef49675553.png
2. 类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名::
示例:
1935024a579e45dcbd626206e14eb26c.png

 

4.类的访问限定符及封装

C++中为了更好的保护数据,在C语言的基础上设置了三个访问限定符(只在编译时有用)
01b5975663eb481dacce2435ca6a44d1.png

4.1访问限定符说明

(1)public可让类内部的变量或成员函数在类外直接被访问
(2)protected和private则会保护类内部的变量或者函数使它们不能被直接访问,从而提高了数据的安全性(此处protected和private是类似的)
(3)C语言的struct内部定义的变量都被默认为public(因为没有访问限定符),而在C++中class内部的成员如果没有写访问限定符都被认为是private的,而struct被默认为public(因为struct要兼容C )
(4)访问权限 作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止 ,如果后面没有访问限定符,作用域就到   }    即类结束。

4.2封装

面向对象的三大特性:封装、继承、多态。

在类和对象阶段,主要是研究类的封装特性,那什么是封装呢?
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来 和对象进行交互。
封装本质上是一种管理,让用户更方便使用类。比如:对于电脑这样一个复杂的设备,提供给用户的就只有开关机键、通过键盘输入,显示器,USB插孔等,让用户和计算机进行交互,完成日常事务。但实际上电脑真正工作的却是CPU、显卡、内存等一些硬件元件。
在C++语言中实现封装,可以 通过类将数据以及操作数据的方法进行有机结合,通过访问权限来
隐藏对象内部实现细节,控制哪些方法可以在类外部直接被使用

 

5.类的作用域

类定义了一个新的作用域,类的所有成员都在类的作用域中 在类体外定义成员时,需要使用 ::
作用域操作符指明成员属于哪个类域。
示例:
687c0a8eea9b4c64927eb321def3da37.png
如图,我们定义了一个叫Person的类,void PrintPersonInfo();是类成员函数的声明,而此成员
函数的定义超出了类的作用域(也就是在类的外面),要让在类外面的函数属于类必须加上在函数
类型后面加上Person::(在类域外面不加Person::就好比小区里面的野狗没有主人;而加了Person::的是有主人的狗,受主人管控)

6.类的实例化

类的实例化是用类类型创建对象的过程
(1)一个类可以有多个对象(一夫多妻制)
(2)定义类时并没有分配实际内存空间来存储
(3)实例化出的对象才会占用实际内存空间,存储类成员变量(也就是对象占有空间的对象),需要注意并吧存储成员函数。原因如下:
调用成员函数的地址都相同,为了不浪费空间, 代码只保存一份, 成员函数的占用的内存空间在公共代码区
(4)空类占一个字节大小,不存储有效数据,只标识着对象被定义出来

(5)类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间

0d55bd55c3a348188ee4f7a20a94c3e0.png


7.类成员函数的this指针

7.1this指针作用

隐藏指针参数, 该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量”的操作都通过该指针访问。
注意:this指针并不需我们去定义,他是编译器自动生成的

7.2this指针特性

(1)类型: 类类型const*,成员函数中,不能给this指针赋值
(2)只能在“成员函数"内部使用
(3)本质:“成员函数"的形参,当对象调用“成员函数"时将对象地址作实参传给形参this,所以对象中不存储this指针
(4)不需要用户传,一般存储在栈/寄存器ecx中
7142ce8c1a864700b3a7d7a14c76cc11.png
(5)this指针的应用
初步
85e7dc9bff6e44a087bae1b2aa6b2a23.jpeg
进阶
#include<iostream>
using namespace std;
//定义一个类对象
class Date
{
//成员变量(私有)
private:int year, month, day;
//公有
public:
//析构函数Date(int y = 0, int m = 0, int d = 0) :year(y), month(m), day(d){;}
//获取月份具体天数函数int GetMonthDay(int year,int month){int MonthDay[13] = { -1,31,28,31,30,31,30,31,31,30,31,30,31 };if (month == 2 && (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)){return 29;}return MonthDay[month];}
//显示日期函数void show(){cout << year << "/" << month << "/" << day << endl;}
//运算符重载Date& operator<(Date& d);//日期比较大小Date& operator++();//++日期friend bool operator==(Date& d1, Date& d2);//判断两个日期是否相等
};
Date& Date::operator<(Date& d)
{if (year < d.year){return *this;//返回原本对象}else if (year > d.year){return d;//返回另外一个对象}else{if (month < d.month){return *this;}else if (month > d.month){return d;}else{if (day < d.day){return *this;}else{return d;}}}
}
Date& Date::operator++()
{day++;if (day > GetMonthDay(year, month)){day = 1;month++;if (month == 13){month = 1;year++;}}return *this;
}
bool operator==(Date& d1, Date& d2)
{if(d1.year==d2.year){ if (d1.month == d2.month){if (d1.day == d2.day){return true;}else{return false;}}else{return false;}}else{return false;}
}
int main()
{Date d1(2024, 5, 22), d2(2024, 3, 24),d3;d3 = d1 < d2;d3.show();bool ret = d1 == d2;cout << "两个日期相同吗(相同为1,不同为0)" << endl;cout << "两个日期:" << ret << endl;Date d4(2024, 12, 31),d5;++d4;d4.show();
}

 

 

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

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

相关文章

html+CSS部分基础运用7

项目1 设计简易灯箱画廊 1.实验所需素材 在trees文件夹中提供一个MP3文件和18个JPG文件&#xff0c;设计页面时可以使用。 2.编程实现简易灯箱画廊&#xff0c;鼠标单击任一个图像超链接&#xff0c;在底部浮动框架中显示大图像&#xff0c;效果如图4-1所示的页面。 图4-1 简…

Echarts图表库推荐以及使用Echarts实现饼图端头弧形效果

推荐Echarts图表库官方链接http://www.ppchart.com/#/ 下面是一段实现饼图端头弧形效果的Echarts代码 虽然有了上面的图表库&#xff0c;里面案例也挺多&#xff0c;但是就是没找到我想要的这种效果&#xff0c;索性就手写了一个 下面代码可以直接去我上面的图标库运行看效果…

书籍学习|基于SprinBoot+vue的书籍学习平台(源码+数据库+文档)

书籍学习平台 目录 基于SprinBootvue的书籍学习平台 一、前言 二、系统设计 三、系统功能设计 1平台功能模块 2后台功能模块 5.2.1管理员功能模块 5.2.2用户功能模块 5.2.3作者功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 …

工程机械比例阀电流采集方案——IPEhub2与IPEmotion APP

自从国家实施一带一路和新基建计划以来&#xff0c;工程机械的需求量呈现出快速增长的趋势。而关于工程机械&#xff0c;其比例阀的控制问题不容忽视。比例阀是一种新型的液压控制装置——在普通压力阀、流量阀和方向阀上&#xff0c;用比例电磁铁替代原有的控制部分&#xff0…

如何使用Cloudways搭建WordPress网站

如今&#xff0c;搭建网站已经变得非常简单&#xff0c;这主要得益于开源的CMS建站系统的兴起。即使是不懂编程的人也能轻松搭建自己的网站&#xff0c;这些CMS系统提供了丰富的主题模板和插件&#xff0c;使用户可以通过简单的拖放和配置操作来建立自己的网站。 WordPress是目…

大语言模型实战——搭建纯本地迷你版RAG

1. 概念 RAG&#xff08;Retrieval Augmented Generation&#xff09;检索增强生成&#xff0c;它结合了搜索技术和大语言模型的提示词功能&#xff0c;以搜索算法找到的信息作为背景上下文&#xff0c;来辅助大语言模型&#xff08;Large Language Model, LLM&#xff09;生成…

Oracle数据库操作问题汇总

一、简介 Oracle Database&#xff0c;又名Oracle RDBMS&#xff0c;或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系数据库管理系统&#xff0c;系统可移植性好、使用方便、功能强&…

基于SpringBoot+Vue在线动漫信息平台设计和实现(源码+LW+部署讲解)

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; &#x1f339;推荐一个人…

Ubuntu20.04安装VINS_Mono 和 VINS_Fusion

文章目录 一、问题描述二、依赖环境1. Eigen 安装2. glog 安装3. gflags 安装4. ceres 安装 三、VINS-Mono 安装1. git 下载并安装2. OpenCV 版本冲突3. 运行 四、VINS—Fusion 安装1. git 下载并安装2. OpenCV 版本冲突3. 运行 五、日常bug1. 动静态库链接冲突 一、问题描述 …

今日好料推荐(Altium Designer + 仿真器驱动)

今日好料推荐&#xff08;Altium Designer 仿真器驱动&#xff09; 参考资料在文末获取&#xff0c;关注我&#xff0c;获取优质资源。 Altium Designer Altium Designer 是一种高度集成的电子设计自动化 (EDA) 软件工具&#xff0c;广泛应用于电子电路和印刷电路板 (PCB) …

操作系统实验--终极逃课方法

找到图片里的这个路径下的文件 &#xff0c;结合当前题目名称&#xff0c;把文件内容全部删除&#xff0c;改为print print的内容为下图左下角的预期输出的内容

Java---Cloneable接口---浅克隆和深克隆

在Java中&#xff0c;我们如何实现一个对象的克隆呢&#xff1f; 在Java中实现对象的克隆&#xff0c;我们要用到Cloneable接口。克隆也分为浅克隆和深克隆。 1.实现浅克隆 1.重写clone方法 当我们想直接通过前面已经建立好的对象来调用Object类中的clone方法时&#xff0c;…

解决mybatis/mybatis plus报错:Invalid bound statement (not found) 的方法汇总

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题&#xff0c;即在mybatis中dao接口与mapper配置文件在做映射绑定的时候接口与xml不匹配&#xff0c;要么是找不到&#xff0c;要么是找到了却匹配不到。 我的问题是项目没有把最新的方法x…

正版软件 | Internet Download Manager 下载管理器

前言 IDM 是一个下载加速器&#xff0c;可将下载速度提高多达 8 倍&#xff0c;恢复、组织和安排下载。 30 天免费试用&#xff01;https://www.internetdownloadmanager.cc/ 新版本 Internet Download Manager v 6.40&#xff1a;添加了 Windows 11 兼容性。改进了媒体采集…

5G工厂长啥样

5G工厂是一种新型的工业互联网基础设施&#xff0c;利用5G为代表的新一代信息通信技术集成&#xff0c;打造新型工业互联网基础设施。在5G工厂中&#xff0c;自动化和智能化设备广泛使用&#xff0c;高度互联的工厂网络得以实现&#xff0c;远程监控和管理成为可能&#xff0c;…

系统测试需求指南(Word版-软件全套资料下载)

1 目的 2 概述 3 测试需求 3.1 测试范围 3.2 测试目标 4 测试需求的现状 5 测试需求的内容 5.1 主体内容 5.2 管理内容 6 测试需求的制定 6.1 需求信息来源 6.2 需求分析 6.2.1 功能性需求 6.2.2 系统功能需求 6.2.3 界面需求 6.2.4 安装需求 6.2.5 业务需求 …

qmt量化交易策略小白学习笔记第8期【qmt编程之获取股票资金流向数据--内置Python】

qmt编程之获取股票资金流向数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 感谢关注&#xff0c;需免费开通量化回测与咨询实盘权限&#xff0c;可以和博主联系&#xff01; 获取股票资金…

【Unity之FGUI】黑神章Fairy GUI控件详解

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;就业…

铜镁合金应用领域广泛 我国具备原材料优势

铜镁合金应用领域广泛 我国具备原材料优势 铜镁合金又称铝青铜&#xff0c;是一种变形铝合金&#xff0c;指将镁金属、铝金属和铜金属经合金化反应制成的合金。与普通铝合金相比&#xff0c;铜镁合金具有比强度高、耐磨性好、减振性能佳、轻量化等优势&#xff0c;在金属冶炼、…

【前端】XML和HTML的区别详解

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…