[C++] 类与对象(上)

请添加图片描述

☃️个人主页:fighting小泽
🌸作者简介:目前正在学习C++和Linux
🌼博客专栏:C++入门
🏵️欢迎关注:评论👊🏻点赞👍🏻留言💪🏻

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

我们之前学习的c语言是面向过程的语言,分析出求解问题的步骤,通过函数调用逐步解决问题

就像我们把手洗衣服分成一个个步骤,然后逐步完成
在这里插入图片描述
而C++是一种面向对象的语言,将一件事情拆分成不同的对象,靠对象之间的交互完成

就像洗衣服可以分为四个对象,每个对象只需要完成自己的任务即可。
在这里插入图片描述

二.类的引入

因为C++是兼容C语言的,所以C语言中的结构体在C++也是存在的,只不过被升级叫做了类,并扩充了一些用法,可以在类中定义函数等新的用法。
在这里插入图片描述

C++中的类更喜欢叫class。

在C++中可以直接用类名定义变量,方便了很多。

三.类的定义

class className
{// 类体:由成员函数和成员变量组成
};  // 一定要注意后面的分号

class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分
号不能省略。

类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数。
类的两种定义方式:

  1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。
  2. 类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加 类名::

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

1.访问限定符

1.C++的访问限定符有三种:private(私有),protect(保护),public(公有)
2. public修饰的成员在类外可以直接被访问
3. protected和private修饰的成员在类外不能直接被访问
4. class的默认访问权限为private,struct为public(因为struct要兼容C)

2.封装

封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来
和对象进行交互。

在C++语言中实现封装,可以通过类将数据以及操作数据的方法进行有机结合,通过访问权限来 隐藏对象内部实现细节,控制哪些方法可以在类外部直接被使用。

五.类的作用域

类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员时,需要使用 ::
作用域操作符指明成员属于哪个类域。

class Person
{
public:void PrintPersonInfo();
private:char _name[20];char _gender[3];int  _age;
};
// 这里需要指定PrintPersonInfo是属于Person这个类域
void Person::PrintPersonInfo()
{cout << _name << " "<< _gender << " " << _age << endl;}

六.类的实例化

用类类型创建对象的过程,称为类的实例化

  1. 类是对对象进行描述的,是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没
    有分配实际的内存空间来存储它;只有实例化出的对象才能实际存储数据,占用物理空间
  2. 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
    在这里插入图片描述

七.类的对象大小的计算

1.类对象的存储方式

每个对象中成员变量是不同的,但是调用的函数是相同的 。当一个类创建多个对象时,每个对象中都会保存一份函数的代码,相同代码保存多次,浪费空间。
所以在类对象中的函数是存储在公共代码段的,当需要使用这个函数时,只需要从公共代码段中调用即可。

在这里插入图片描述

在这里插入图片描述

注意:函数是不存储在类对象当中的,所以一个类的大小,实际就是该类中”成员变量”之和,当然要注意 结构体内存对齐
注意空类的大小,空类比较特殊,分配1byte,不存储数据,只是占位,表示对象存在过

八.类成员函数的this指针

C++中函数并没有像C语言一样传入对象结构体的参数,那么编译器怎么知道这次是哪个函数调用的呢?C++编译器给每个“非静态的成员函数“增加了一个隐藏的this指针,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量”的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

`
在这里插入图片描述

1.this指针的特性

  1. this指针的类型:类类型* const,即成员函数中,不能给this指针赋值。
  2. 只能在“成员函数”的内部使用
  3. this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给
    this形参。所以对象中不存储this指针,this指针存储在函数栈帧中。
  4. this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传
    递,不需要用户传递

2.this指针可以为空吗?

this指针可以为空
单纯的对this赋空是不可以的,不过可以强转直接赋空,不过一般不进行这样的操作

1.下面程序编译运行结果是? A、编译报错 B、运行崩溃 C、正常运行
class A
{
public:void Print(){cout << "Print()" << endl;}
private:int _a;
};
int main()
{A* p = nullptr;p->Print();return 0;
}

上面程序是正常运行的,因为Print函数是存储在公共代码区的,不在对象里面。编译器很聪明,会直接去公共代码区去找这个函数,不会对空指针解引用的。

结尾

今天我给大家分享的关于类和对象环的知识就到这里了,之后我还会更新剩下的部分,希望我们都能有所收获
先赞后看,养成习惯!!^ _ ^
码字不易,大家的支持就是我坚持下去的动力,点赞后不要忘了关注我哦!

如有错误,还请您批评改正(。ì _ í。)

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

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

相关文章

设计模式篇---组合模式

文章目录 概念结构实例总结 概念 组合模式&#xff1a;组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。组合模式让客户端可以统一对待单个对象和组合对象。 当我们开发中遇到树形结构的业务时&#xff0c;可以考虑使用组合模式。&#xff08;我也没有想明白为啥…

前端如何直接上传文件夹

前面写了一篇仿写el-upload组件&#xff0c;彻底搞懂文件上传&#xff0c;实现了选择/拖拽文件上传&#xff0c;我们经常看到一些网站支持直接选择整个文件夹上传&#xff0c;例如&#xff1a;宝塔面板、cloudflare托管、对象存储网站等等需要模拟文件路径存储文件的场景。那是…

px4仿真实现无人机自主飞行

一,确定消息类型 无人机通过即在电脑是现自主飞行:思路如下。 通过Mavros功能包,将ROS消息转换为Mavlink消息。实现对无人机的控制。 几种消息之间的关系如下: 对于ROS数据,就是我们机载电脑执行ROS系统的数据。 对于Mavros消息,就是Mavros功能包内部的消息。查询网站…

leetcode:575. 分糖果(python3解法)

难度&#xff1a;简单 Alice 有 n 枚糖&#xff0c;其中第 i 枚糖的类型为 candyType[i] 。Alice 注意到她的体重正在增长&#xff0c;所以前去拜访了一位医生。 医生建议 Alice 要少摄入糖分&#xff0c;只吃掉她所有糖的 n / 2 即可&#xff08;n 是一个偶数&#xff09;。Al…

《数字图像处理-OpenCV/Python》连载(26)绘制椭圆和椭圆弧

《数字图像处理-OpenCV/Python》连载&#xff08;26&#xff09;绘制椭圆和椭圆弧 本书京东优惠购书链接&#xff1a;https://item.jd.com/14098452.html 本书CSDN独家连载专栏&#xff1a;https://blog.csdn.net/youcans/category_12418787.html 第 4 章 绘图与鼠标交互 本章…

同心创变,共赢未来 ▏易我科技2023年度“春种秋收”经营分析会圆满举行

2023年10月12日—10月13日&#xff0c;易我科技举行了2023年度管理层秋季团建暨“春种秋收”经营分析会&#xff0c;全体管理干部参加了本次活动。 01 本次团建活动的主题是“同心创变&#xff0c;共赢未来”&#xff0c;旨在通过一系列有趣而富有挑战性的团队活动&#xff0c…

计算机能转嵌入式吗?

计算机能转嵌入式吗&#xff1f;计算机和嵌入式不是一个范畴的&#xff0c;嵌入式是计算机的一个求职方向或者细分领域。你应该把他和Java放在一个层次上而不是跟整个计算机放在一个层次上。最近很多小伙伴找我&#xff0c;说想要一些嵌入式资料&#xff0c;然后我根据自己从业…

Node编写用户注册接口

目录 前言 创建服务器 编写注册接口API 创建路由对象&#xff0c;将路由对象导出去 将路由对象导出到服务器中 判断用户发起注册请求时是否输入账号或密码 验证表单数据 在数据库中创建表 在node中绑定mysql数据库 判断用户注册的账号密码是否已经被注册 密码加密 完…

水质分析仪器升级新功能

水质分析仪器&#xff1a;是一种适用于水质多参数测试的便携式仪器。它具有7英寸的触摸彩色屏幕&#xff0c;用户可以通过触摸屏幕进行操作和查看测试结果。 该仪器主要用于测定COD&#xff0c;氨氮&#xff0c;总磷&#xff0c;总氮等常规水质指标&#xff0c;pH值、溶解氧、…

CVer从0入门NLP(一)———词向量与RNN模型

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;专栏推荐&#xff1a;深度学习网络原理与实战 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞&#x1f44d;&#x1f3fc;、…

rancher2.6.4配置管理k8s,docker安装

docker快速安装rancher并管理当前k8s集群。 1、拉镜像 docker pull rancher/rancher:v2.6.4 2、启动rancher 启动很慢 --privileged必须拥有root权限&#xff0c;并挂载卷 docker run --privileged -d --restartunless-stopped -p 80:80 -p 443:443 -v /usr/local/docker_vo…

模拟经营微信小游戏-休闲餐厅上线了

《休闲餐厅》是一款关于餐厅经营的小游戏&#xff0c;玩家可以在游戏中扮演餐厅老板&#xff0c;经营自己的休闲餐厅&#xff0c;收集美丽的厨娘&#xff0c;炒菜、做饭、卖钱、装饰餐厅&#xff0c;享受经营的乐趣。 在游戏中&#xff0c;玩家可以解锁几百种菜品&#xff0c;每…

【JS的设计模式一】

本文参考书籍 《JavaScript设计模式与开发实践》 在 JavaScript 编程中&#xff0c;this 关键字总是让人感到迷惑&#xff0c;Function.prototype.call 和 Function.prototype.apply 这两个方法也有着广泛的运用。我们有必要在学习设计模式之前先理解 这几个概念。 this Java…

百度Comate代码助手全新上线SaaS服务,助力企业释放10倍软件生产力!

“1024”程序员节来临之际&#xff0c;百度智能云宣布百度Comate智能代码助手正式上线SaaS版本&#xff0c;可提供10余项编码功能&#xff0c;适配100种开发语言&#xff0c;面向广大企业和开发者提供更便捷、更灵活的智能编码工具&#xff0c;助力企业提升研发效率。即日起企业…

python控制Windows桌面程序自动化模块uiautomation

github仓库地址&#xff1a;GitHub - yinkaisheng/Python-UIAutomation-for-Windows: (Donot use 3.7.6,3.8.1):snake:Python 3 wrapper of Microsoft UIAutomation. Support UIAutomation for MFC, WindowsForm, WPF, Modern UI(Metro UI), Qt, IE, Firefox, Chrome ... uiaut…

领域驱动设计:基于DDD的微服务设计实例

文章目录 项目基本信息战略设计战术设计后续的工作 用一个项目来了解 DDD 的战略设计和战术设计&#xff0c;走一遍从领域建模到微服务设计的全过程&#xff0c;一起掌握 DDD 的主要设计流程和关键 点。 项目基本信息 项目的目标是实现在线请假和考勤管理。功能描述如下&…

新材料制造业工厂MES系统解决方案

新材料是指具有优异性能和功能的材料&#xff0c;是国家战略性新兴产业的重要支撑。新材料涵盖了高性能结构材料、先进功能材料、生物医用材料、智能制造材料等多个领域&#xff0c;广泛应用于航空航天、电子信息、节能环保、生物医药等行业&#xff0c;对于提升国家综合实力和…

生成式AI革命对亚马逊的电商业务是威胁还是机遇?

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;当所有人都在关注生成式AI是如何威胁谷歌(GOOG)的搜索业务之际&#xff0c;投资界却忽视了一个事实&#xff0c;即&#xff1a;它也给亚马逊(AMZN)的电商业务带来了威胁。 &…

使用Selenium-PO设计模式提高Web自动化测试效率

PO&#xff08;page object&#xff09;设计模式是在自动化中已经流行起来的一种易于维护和减少代码的设计模式。在自动化测试中&#xff0c;PO对象作为一个与页面交互的接口。测试中需要与页面的UI进行交互时&#xff0c;便调用PO的方法。这样做的好处是&#xff0c;如果页面的…

哪吒X选车指南:推荐哪吒X 500lite 版

当下,紧凑型纯电动SUV市场新车不断,可选项越来越多。最近哪吒汽车又上市一款“大气舒适新标杆”——哪吒X,限时权益价10.88万元-12.88万元,以大空间,超舒适,更安全等优势,强势对标AION Y Plus和元Plus等车型。 很多有购车打算的消费者看过价格和配置,直呼哪吒X是“性价比显眼包…