类与对象【上】

news2024/9/24 23:32:12

在这里插入图片描述

欢迎来到Cefler的博客😁
🕌博客主页:那个传说中的man的主页
🏠个人专栏:题目解析
🌎推荐文章:题目大解析2

在这里插入图片描述


目录

  • 👉🏻面向过程和面向对象
  • 👉🏻类的引入
  • 👉🏻类的定义
    • 类的两种定义
    • 类的变量声明规则
  • 👉🏻类的访问限定符
    • 类的大小以及类中的函数在内存中的位置

👉🏻面向过程和面向对象

我们用洗衣机洗个衣服,存在着3个对象:人、衣服、洗衣机。
在这里插入图片描述

在c语言当中,我们会注重过程,人是怎么将衣服放入洗衣机的,洗衣机的内部是如何操作运行的。
C++是基于面向对象的,关注的是对象

👉🏻类的引入

在c语言中,结构体中只能定义变量,但是在c++中,结构体不但可以定义变量,还可以定义函数

struct Stack
{
	void Init()
	{
		a = NULL;
		top = capacity = 0;
	}
	int* a;
	int top;
	int capacity;
};
int main()
{
	Stack s1;//c++中可以忽略struct
	s1.Init();

	return 0;
}

👉🏻类的定义

语法

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

类中的变量叫做类的属性或成员变量;类中的函数叫做类的方法或成员函数;类中的内容称为类的成员

类的两种定义

☂️1.类的声明和定义全部都在类体中进行
若函数的定义也在类体中进行,编译器可能会将其当作内联函数处理
☂️2.类的声明和定义分开
若类的声明在.h文件中进行,类的函数定义在.cpp文件中进行,成员函数前需加上
类名::

类的变量声明规则

一般声明类的变量我们会在变量前/后加上_,m;
原因是为了说明其局部性。

class Date
{
	void Init(int year, int month, int day)
	{
		year = year;
	}
	int year;
	int month;
	int day;
};

如上述代码,编译器并不会报错,但这里问题出在函数的参数和类的成员变量的命名起冲突了,而一般在类中会先搜索类内的局部变量,所以这里是类中的year自己赋值给本身,并无意义。
所以我们才出现了这一套的命名规则。

👉🏻类的访问限定符

在这里插入图片描述

  1. public修饰的成员在类外可以直接被访问
  2. protected和private修饰的成员在类外不能直接被访问
  3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
  4. 如果后面没有访问限定符,作用域就到 } 即类结束。
  5. class的默认访问权限为private,struct为public(因为struct要兼容C)

类的大小以及类中的函数在内存中的位置

class Date
{
	void Init(int year, int month, int day)
	{
		year = year;
	}
	int year;
	int month;
	int day;
};
int main()
{
	Date d1;
	cout << sizeof(Date) << endl;
	cout << sizeof(d1) << endl;

	return 0;
}

上述代码中,结果是多少呢?
如果只看类中的成员变量,我们知道有3个int,所以是12个字节。
但是函数在类中占不占空间呢?
我们先看下结果 👇🏻 👇🏻
在这里插入图片描述
由此观之,函数在类中是不占空间的。
事实上,类中的方法即函数共用内存的中的一块区域。
可以这样理解,当我们实例化多个类的对象时,类的对象就是一个房子,房子中有浴室、卧室、厨房,而每个对象的成员变量就是相当这些浴室、卧室、厨房。
所以成员变量是相对独立的,每实例化一个对象,都要在内存中开辟空间。
但是函数不一样,函数相当于小区里的篮球场,便利店,是共有的。
它既属于每个对象,又不单单只属于某个对象。所以它只是在内存中占用一个区域。

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

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

相关文章

SAM在医学图像分割的一些研究(Segment Anything Model for Medical Images?(2023))

使用预训练模型通过两种主要模式进行分割&#xff0c;包括自动一切和手动提示(例如&#xff0c;点和框)。SAM在各种自然图像分割任务上取得了令人印象深刻的效果。然而&#xff0c;由于医学图像的形态复杂、解剖结构精细、物体边界不确定和复杂、物体尺度大&#xff0c;使得医学…

中小企业如何做好MES管理系统实施建设

中小企业在生产制造领域面临着诸多挑战&#xff0c;包括提升产品竞争力、规范生产制造等。为了应对这些挑战&#xff0c;越来越多的中小企业开始实施MES生产管理系统。然而&#xff0c;由于企业规模小、资源实力不足等原因&#xff0c;很多企业在实施MES管理系统时存在一定的困…

前端下载文化部几种方法(excel,zip,html,markdown、图片等等)和导出 zip 压缩包

文章目录 1、location.href2、location.href3、a标签4、请求后端的方式5、文件下载的方式6、Blob和Base647、下载附件方法(excel,zip,html,markdown)8、封装下载函数9、导出 zip 压缩包相关方法(流方式) 总结 1、location.href //get请求 window.location.href url;2、locati…

流程图模板有哪些?这几款高频使用模板收好

流程图模板有哪些&#xff1f;流程图是一种常用的图形表现形式&#xff0c;用于展示业务流程或操作流程。对于需要频繁制作流程图的用户&#xff0c;选择一个易用、高效的流程图制作工具非常重要。下面介绍几款高频使用的流程图模板&#xff0c;一起来看看吧&#xff01; 第一款…

iTOP-RK3588开发板Ubuntu 系统交叉编译 Qt 工程-命令行交叉编译

使用源码 rk3588_linux/buildroot/output/rockchip_rk3588/host/bin/qmake 交叉编译 QT 工程。 最后烧写编译好的 buildroot 镜像&#xff0c;将编译好的 QT 工程可执行程序在 buildroot 系统上运行。 交叉编译 QT 工程如下所示&#xff0c;首先进入 QLed 的工程目录下。 然后…

将word每页页眉单独设置

在进行论文排版的时候&#xff0c;总是会出现页眉的页码设置问题&#xff0c;比如出现奇数或偶数页码一致&#xff0c;尝试将前面页码改掉&#xff0c;后面再修改前面也进行了变动&#xff0c;将每页页眉单独设置&#xff1a; &#xff08;1&#xff09;在第一页的最后一行输入…

反步控制理论

一.简单反步控制器 简单反步控制器的设计思想是将复杂的非线性系统分解成不超过系统最高阶数的子系统&#xff0c;然后为每个子系统分别设计Lyapunov函数和中间虚拟控制量&#xff0c;一直“后退” 到整个系统&#xff0c;直到完成整个控制律的设计。 以二阶反步控制器为例&a…

Sui主网升级至V1.6.3版本

Sui主网现已升级至V1.6.3版本&#xff0c;此升级包含了多项修复和优化。升级要点如下所示&#xff1a; #13029 在构建Move代码时&#xff0c;可能会出现与实现自定义transfer/share/freeze函数相关的额外linter警告。这些函数是为了实施自定义的transfer/share/freeze策略而…

Vue的 hash 模式与 history 模式

为了能够在改变视图的同时&#xff0c;不向后端发出网络请求。浏览器提供了 hash 模式与 history 模式。 而 vue 中的路由器就是利用了这两种模式&#xff0c;来实现前端路由的。 路由器的 hash 模式&#xff1a; 一、在 router 目录下的 index.js 文件中&#xff0c;通过 m…

如何使用JavaScript创建一只图像放大镜

如果您曾经浏览过购物网站&#xff0c;可能遇到过图像放大功能。它可以让您放大图像的特定区域&#xff0c;以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验。 以一种无缝衔接的方式构建图像放大镜可能是个挑战。但是逐步完成这些步骤将帮助您从头开始创建自己的…

【Unity 实用工具篇】✨| 学会使用 可编程瓦片Tile Map,快速搭建2D地图

前言【【Unity 实用工具篇】✨| 学会使用 可编程瓦片Tile Map,快速搭建2D地图一、导入 Tile Map Editor二、创建调色板 Tile Palette三、快速绘制地图四、TilePalette 调色板功能介绍五、TileMap 相关组件属性介绍GirdTilemapTilemap Renderer 瓦片地图渲染器Tile Assets 瓦片…

香港IT软件开发服务公司Alpha Technology 申请纳斯达克IPO上市

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于中国香港的IT软件开发服务公司Alpha Technology 近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申请在纳斯达克IPO上市&#xff0c;股票代码为&#xff0…

一篇让你熟练掌握Google Guava包

Google Guava guava开源库的地址&#xff1a;github.com/google/guava 这个工具的介绍&#xff0c;搜集自网络&#xff0c;自己整理一下格式&#xff0c;感觉不错&#xff0c;分享一下。最近读源码碰到的有趣工具类挺多&#xff0c;分享大家都学习一下。 概述 工具类 就是封…

零基础入门一文带你了解前端React中组件的使用

目录 一、React 组件介绍 二、创建React组件的两种方式 1. 使用函数创建组件 2. 使用类创建组件 3. 抽离为独立 JS文件 三、React 事件处理 1. 事件绑定 2. 事件对象 四、有状态组件与无状态组件 1. state的基本使用 2. setState() 修改状态 3. 从 JSX 中抽离事件…

文心一言 VS 讯飞星火 VS chatgpt (70)-- 算法导论6.5 9题

九、请设计一个时间复杂度为 (n lgk)的算法&#xff0c;它能够将 k 个有序链表合并为一个有序链表&#xff0c;这里 n 是所有输入链表包含的总的元素个数。(提示:使用最小堆来完成 k 路归并。 文心一言&#xff1a; 要设计一个时间复杂度为 O(n log k) 的算法&#xff0c;将 …

CVE-2023-37582 Apache RocketMQ 远程代码执行漏洞

漏洞简介 Apache RocketMQ是一款低延迟、高并发、高可用、高可靠的分布式消息中间件。CVE-2023-37582 中&#xff0c;由于对 CVE-2023-33246 修复不完善&#xff0c;导致在Apache RocketMQ NameServer 存在未授权访问的情况下&#xff0c;攻击者可构造恶意请求以RocketMQ运行的…

线程池相关理论

什么是线程池 线程池是一种利用池化技术思想来实现的线程管理技术&#xff0c;主要是为了复用线程、便利地管理线程和任务、并将线程的创建和任务的执行解耦开来。我们可以创建线程池来复用已经创建的线程来降低频繁创建和销毁线程所带来的资源消耗。在JAVA中主要是使用Thread…

C高级--day2(用户相关操作 磁盘相关操作 shell脚本 修改环境变量)

#include<myhead.h>void fun(int n) {if(n>9){fun(n/10);printf("%d\t",n%10);putchar(10);return;}else{printf("%d\n",n%10);return;} } int main(int argc, const char *argv[]) {int num;printf("请输入一个整数&#xff1a;");sca…

华为OD机试真题 Java 实现【寻找最大价值的矿堆】【2023 B卷 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、Java算法源码五、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》。 刷的越多…

RISC-V基础之函数调用(一)简单的函数调用(包含实例)

高级语言支持函数&#xff08;也称为过程或子程序&#xff09;来重用通用的代码&#xff0c;以及使程序更加模块化和可读。函数可以有输入&#xff0c;称为参数&#xff0c;和输出&#xff0c;称为返回值。函数应该计算返回值&#xff0c;并且不产生其他意外的副作用。 在一个…