类和对象(上) - c++

news2024/11/15 17:03:10

1.类的定义

1.1  类定义格式

  1.  class 是定义类的关键字 ,后跟类的名字,{}部分为类的主体,(注意:最后类定义结束时不要忘了 ; )。
  2.  类体中内容称为类的成员:类中的变量称为成员变量; 类中的函数称为成员函数。
  3. 在c++中,struct也可以定义类(c++兼容c语言),同时struct升级成类,在里面也可以定义函数,不过与class还是存在一些区别。
  4. 定义在类里面的函数默认为内联函数。

1.2 访问限定符

存在三种1.public 

                  2.private

                  3.protected

  1. C++一种实现封装的方式,用类将对象的属性与方法结合在一起,让对象更加完善,通过访问权限选择性的将其接口提供给外部使用。
  2. public修饰的成员在类外可以直接被访问protectedprivate修饰的成员在类外不能直接被访,protected和private类似,但也存在区别。
  3. 定义的成员类没有显示修饰时,class默认是private,struct默认为public。
  4. 一般成员变量都会限制为为private/protected,需要给外部使用的成员函数会放为public。

1.3 类域

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

2.实例化

2.1 概念:用类类型在物理内存中创建对象的过程,称为类实例化出对象。

  1. 我们可以想象成:我们定义了一个类类型,这个类相当于一个建筑模型,包括材料(成员变量)和过程方法(成员函数),建造师(我们)通过这个类建造出一个一个的房子(对象),就是实例化。
  2. 我们定义了一个类,但只是声明是一个模型,并没有分配空间,也不能存储数据,实例化成对象后才分配物理空间。

2.2 对象大小

首先,对象里面有些啥?1.成员变量 2.成员函数。成员变量必然需要分配空间存储,但是成员函数就不需要。对于函数,在编译后是一段指令,无法存在对象里,而是存在代码段。我们只能存函数的指针,但是对于成员函数而言,我们实例化出100个对象时,每个对象都有一样功能的函数,一样的指针重复存储100次,就太浪费了。其实函数指针是一个地址,由于成员函数是类的一部分,它们的地址在编译时就已经确定,并且对于所有该类的对象实例都是相同的。这意味着,虽然每个对象实例的内存位置不同,但它们调用同一成员函数时,调用的函数体是相同的。种设计方式有助于节省内存,因为不需要为每个对象实例复制成员函数。

所以讨论对象大小,我们只需要看成员变量,对于c++的类任然遵循结构体内存对齐原则,我在之前的文章中讲过 点击链接结构体对齐  

3. this指针

一个类中,当然不止会有一个对象,当存在多个对象时,在调用时,函数是如何知道该访问哪个对象呢?所以c++给了一个隐形的this指针。

编译器编译后,类的成员函数默认都会在形参第一个位置,增加一个当前类类型的指针,叫做this
指针。

分享到这。

个人主页点这里~

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

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

相关文章

武汉流星汇聚:跨境电商桥梁连接中国与世界,中国产品畅销全球

在全球经济一体化的大背景下,零售电商行业以其独特的魅力和无限潜力,正引领着全球商业模式的深刻变革。特别是中国卖家,通过跨境电商平台这一桥梁,轻松触达全球消费者,实现了商品的快速流通和市场的广泛覆盖&#xff0…

Spark 基础 与 安装

Spark 基础 一、MapReduce编程模型的局限性 1、繁杂:只有Map和Reduce两个操作,复杂的逻辑需要大量的样板代码 2、处理效率低: Map中间结果写磁盘,Reduce写HDFS,多个Map通过HDFS交换数据 任务调度与启动开销大 3、…

十城联动共建生态登陆山东 纷享销客从原厂型向生态型CRM进化

7月30日,纷享销客渠道生态伙伴发展共建会之山东专场盛大举行,百余家优秀伙伴到场共享CRM领域高质量增长新机遇。2024年,纷享销客将坚定不移地从原厂型向生态型CRM厂商进化,把伙伴们扶上马,送一程,共发展&am…

Java--异常

目录 异常的概念异常的体系结构异常抛出异常处理异常throws声明try-catch捕获 异常处理流程自定义异常类 异常的概念 Java中,程序执行过程中发生的不正常的行为称为异常。 我们之前学数组的时候可能会遇到的数组越界异常:ArrayIndexOutOfBoundsException…

Reeder + RSS+ - 订阅RSS信息

文章目录 引言ReederRSS 源微博Bilibilirsshub自己发现 feed RSS 使用 引言 信息越来越多,也层次不齐,难以花时间筛选,但也不能闭目塞听。 使用爬虫 每日定时 去爬取不同网站需要的信息,还是有些繁琐,又让人想到 RSS …

odoo 去掉新手简介

很多模块有这样的提示,这种是可以动态关闭的 菜单 设置-技术-入职 可以动态切换,是否再次展示

不同类型的生物反应器在支架成熟过程中具有哪些特点和应用?

3D Bioprinting of Human Tissues: Biofabrication, Bioinks, and Bioreactors是发表于《International Journal of Molecular Sciences》的一篇综述,详细介绍了3D生物打印人体组织的相关技术进展,包括数据处理、生物打印技术、生物墨水配方、生物反应器…

设计理念中——抽象与接口和用(C#)

前言 在程序设计中,使用抽象类还是用接口应该是一个需要考虑的场景,有时我们感觉这两者并没有太大的区别,有时又有很大区别。这里是一些说明和示例。 一、抽象类和接口 1、相同点: 1)都可以被继承 2)都不能被实例化…

paddleSeg项目实战

问题1:cmake 编译报错 解决办法:添加一条语句 set(DEMO_NAME "test_seg") #这里的test_seg就是src里的文件名问题2: 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2038 检测到“RuntimeLibrary”的不匹配项: 值“MT_Stat…

汽车EDI中的常见术语以及流程详解

汽车EDI常见术语 EDI —— 电子数据交换3PL(第三方物流) —— 外包仓库/运输供应商。 一般用于售后市场,但偶尔也用于原始设备制造商。也可由原始设备制造商和售后市场公司用来分销产品。Aftermarket(后市场) —— 经…

详细阐述大模型微调过程、方法、案例

大模型微调 大模型微调(Fine-tuning)的定义是:在已经预训练好的大型深度学习模型基础上,使用新的、特定任务相关的数据集对模型进行进一步训练的过程。这种微调技术的主要目的是使模型能够适应新的、具体的任务或领域&#xff0c…

透明屏幕方案介绍

透明屏幕方案主要涉及透明显示屏的技术原理、应用场景、优势以及未来发展趋势等方面。以下是对透明屏幕方案的详细介绍: 一、技术原理 透明屏幕,特别是透明LED显示屏和透明OLED显示屏,采用了先进的技术原理来实现其独特的显示效果。 透明LED显…

牛客 KY11.二叉树遍历

牛客 KY11.二叉树遍历 思路: 我们接收字符串以后,创建一个二叉树结构体,然后就可以开始建立树,如果是字符就malloc新的结点去存储,是**#就返回空**,最后用递归以根左右的顺序创建结点。树建立完成后&#x…

Linux中防火墙实战之Web服务器和ssh远程服务配置指南

🏡作者主页:点击! 🐧Linux基础知识(初学):点击! 🐧Linux高级管理防护和群集专栏:点击! 🔐Linux中firewalld防火墙:点击! ⏰️创作…

螺钉柱的设计

如果螺钉柱参数设置不合理,可能导致螺钉柱滑牙、爆裂、断裂、螺丝断裂、螺钉头磨损、螺钉攻入费力等问题 具体参数可以参照下表 螺丝柱设计尺寸: 螺丝柱设计要点: 频繁拆卸的注意事项: 自攻牙螺丝柱不宜频繁拆卸,因…

AI大模型应用(2)ChatGLM3本地部署及其在alpaca_zh数据集上的低精度微调

AI大模型应用(2)ChatGLM3部署及其在alpaca_zh数据集上的低精度微调 我们之前已经了解了HuggingFace中peft库的几种高效微调方法。 参数高效微调PEFT(一)快速入门BitFit、Prompt Tuning、Prefix Tuning 参数高效微调PEFT(二)快速入门P-Tuning、P-Tuning V2 参数高效微调PEFT…

C++第三十弹---C++继承机制深度剖析(中)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、派生类的默认成员函数 1.1、派生类的构造函数 1.2、派生类的拷贝构造函数 1.3、派生类的赋值重载 1.4、派生类的析构函数 2、继承与友元 …

TL3568编译Kernel内核 make tl3568-evm.img -j16报错 ‘arch/arm64/boot/Image.lz4‘ failed

在编译Kernel时,遇到报错内容: /bin/sh: lz4c: command not found arch/arm64/boot/Makefile:31: recipe for target arch/arm64/boot/Image.lz4 failed make[1]: *** [arch/arm64/boot/Image.lz4] Error 1 arch/arm64/Makefile:139: recipe for target …

科普文:【支持信创、宣传国产】Alibaba Dragonwell JVM性能提升50%

4月5日,阿里云开放了新一代ECS实例的邀测[1],Alibaba Dragonwell也在新ECS上进行了极致的优化。相比于之前的dragonwell_11.0.8.3版本,即将发布的dragonwell_11.0.11.6在SPECjbb2015[2] composite模式测试中,系统吞吐量max-jOPS提…

【算法】插值查找(对二分查找的优化)

引言 在二分查找中,对于相对较大的数或较小的数来说,查询效率是很低的,我们希望程序可以自适应待查询的数,使用插值算法 插值查找原理 1.插值查找算法类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查找 2…