类和对象的学习1

news2024/10/6 15:10:00

类和对象的学习1

  • @[TOC](类和对象的学习1
    • 一、类的定义
      • 1.类定义格式
      • 2.访问限定符
    • 二、实例对象
      • 1.实例
      • 3.对象大小
      • 4. this指针
      • 5.⾯向对象三⼤特性“封装、继承、多态”中的封装)

一、类的定义

1.类定义格式

1.1 class为定义类的关键字,Stack为类的名字,{}中为类的主体,在}的和后面加上分号。类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的⽅法或者成员函数。

1.2 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,一般会在成员变量前面加_或者其他的。

1.3 C++里面struct也可以定义类,用struct定义类和class定义类之间有区别。

1.4 定义在类⾯的成员函数默认为inline。

2.访问限定符

2.1 访问限定符有3个:private/protected/public。

2.2 public修饰的成员在类外可以直接被访问;protected和private修饰的成员在类外不能直接被访问。

2.3 class定义成员没有被访问限定符修饰时默认为private,struct默认为public。

2.4 成员变量一般会被定义为private或是protected,成员函数会被定义成public

class SeqList 
{
	public:
	void Init()
	{
		_size = _capacity = 0;
		_arr = nullptr;
	}
private:
	int* _arr;
	int  _size;
	int  _capacity;
};
int main()
{
	SeqList sl;
	sl.Init();
	return 0;
}
```cpp
在这里插入代码片

### 3、类域
3.1 类定义了⼀个新的作⽤域,类的所有成员都在类的作⽤域中,在类体外定义成员时,需要使⽤ :: 作
⽤域操作符指明成员属于哪个类域。
3.2  声明和定义分离,需要指定类域。

```cpp
class SeqList 
{
	public:
	void Init();
private:
	int* _arr;
	int  _size;
	int  _capacity;
};
void SeqList::Init()
{
	_size = _capacity = 0;
	_arr = nullptr;
}

二、实例对象

1.实例

1.1 ⽤类类型在物理内存中创建对象的过程,称为类实例化出对象。
1.2类是对象进⾏⼀种抽象描述,是⼀个模型⼀样的东西。这些成员变量只是声明,没有分配空间,⽤类实例化出对象时,才会分配空间。

class SeqList 
{
	public:
	void Init();
private:
	int* _arr;
	int  _size;
	int  _capacity;
};
void SeqList::Init()
{
	_size = _capacity = 0;
	_arr = nullptr;
}
int main()
{
	SeqList sl;//这个就是实例化;
	sl.Init();
	return 0;
}

3.对象大小

内存对⻬规则
• 第⼀个成员在与结构体偏移量为0的地址处。
• 其他成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处。
• 注意:对⻬数 = 编译器默认的⼀个对⻬数 与 该成员⼤⼩的较⼩值。
• VS中默认的对⻬数为8
• 结构体总⼤⼩为:最⼤对⻬数(所有变量类型最⼤者与默认对⻬参数取最⼩)的整数倍。
• 如果嵌套了结构体的情况,嵌套的结构体对⻬到⾃⼰的最⼤对⻬数的整数倍处,结构体的整体⼤⼩
就是所有最⼤对⻬数(含嵌套结构体的对⻬数)的整数倍。

#include<iostream>
using namespace std;
class SeqList 
{
	public:
	void Init();
private:
	int* _arr;
	int  _size;
	int  _capacity;
};
void SeqList::Init()
{
	_size = _capacity = 0;
	_arr = nullptr;
}
int main()
{
	SeqList sl;
	sl.Init();
	cout << sizeof(sl) << endl;//int是4个字节,3个int,12个字节, VS中默认的对⻬数为8,所以结果是16
	return 0;
}

在这里插入图片描述

没有成员变量的对象的⼤⼩是,因为如果⼀个字节都不给,怎么表⽰对象存在过呢!所以这⾥给1字节,是为了占位标识对象存在。
在这里插入图片描述

4. this指针

4.1在C++中,this是一个关键字,用于表示当前对象的指针。在成员函数内部,this指针总是指向调用该函数的对象。这样就可以在成员函数中访问对象的成员变量和成员函数。
4.2 this指针是一个指向调用当前成员函数的对象的指针,它指向的是类的非静态成员。在成员函数中,可以使用this指针来访问成员变量和成员函数。
4.3


```cpp
class Time
{
public:
	void init(int year,int month,int day)
	{
		year = year;//前面的year是成员变量的year,前面有一个隐含的this指针,指向该对象的成员变量
		month = month;//this指针是隐藏的
		day = day;
	}
private:
	int year;
	int month;
	int day;
};
int main()
{
	Time t1;
	t1.init(1, 1, 1);
	
	return 0;
}

this指针存在内存的栈区域的

5.⾯向对象三⼤特性“封装、继承、多态”中的封装)

5.1 C++中数据和函数都放到了类⾥⾯,通过访问限定符进⾏了限制,不能再随意通过对象直接修改数
据,这是C++封装的⼀种体现。
5.2 C++中有⼀些相对⽅便的语法,⽐如Init给的缺省参数会⽅便很多,成员函数每次不需要传对象地
址,因为this指针隐含的传递了,⽅便了很多,使⽤类型不再需要typedef⽤类名就很⽅便。

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

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

相关文章

第十五周周报

目录 摘要Abstract1 LSTM模型实战1.1 数据处理1.2 LSTM模型的搭建1.3 数据的预测和可视化 2 transformer&#xff08;上&#xff09;2.1 Transformer 结构2.2 Transformer 编码器 总结 摘要 本周的工作内容主要分为两个部分&#xff0c;第一部分是使用LSTM模型预测股票市场数据…

Python(八)-异常

目录 什么是异常 快速入门异常 常见的异常类型 常见处理方式 捕获一个指定异常 捕获多个异常 捕获所有的异常 异常的其他关键字 异常具有传递性 什么是异常 异常指的是Python程序发生的不正常事件。 有时候&#xff0c;异常可称为错误。 当检测到一个错误时&#x…

CPU飙高如何处理?

测试人员在压测的时候&#xff0c;会对应用进行测试&#xff0c;这个时候会查看cpu、内存、load、rt、qps等指标 CPU利用率是来描述CPU的使用情况的&#xff0c;表明了一段时间内CPU被占用的情况。使用率越高&#xff0c;说明机器在这个时间上运行了很多程序。 如何进行问题定…

codetop标签树刷题(四)!!暴打面试官!!!!

用于个人复习 1.二叉树的右视图2.二叉树最大宽度3.二叉树的最大深度4.N叉树的最大深度5.二叉树的最小深度6.子树的最大平均值7.求根节点到叶节点的数字之和8.另一棵树的子树9.对称二叉树 1.二叉树的右视图 给定一个二叉树的根节点root&#xff0c;想象自己站在它的右侧&#x…

麒麟操作系统如何识别提取图片中的文字

在工作、学习中&#xff0c;我们经常会需要从图片中提取文字&#xff0c;在手机上或其它操作系统上&#xff0c;有各种方法。本书中&#xff0c;我们介绍麒麟操作系统提取图片中文字的方法。 首先准备好自己需要的文档截图&#xff0c;把不需要的部分裁掉&#xff0c;以免影响…

电容笔值得买吗?2024精选盘点推荐五大惊艳平替电容笔!

电容笔还是很值得买的&#xff0c;不管是对于日常书写&#xff0c;简单笔记&#xff0c;还是绘画等场景而言&#xff0c;选择一款性价比高的平替电容笔都能提升生产力。可是现在市面上的品牌很多&#xff0c;该如何挑选最适合自己的电容笔呢&#xff1f;不用着急&#xff0c;我…

【AIGC半月报】AIGC大模型启元:2024.10(上)

【AIGC半月报】AIGC大模型启元&#xff1a;2024.10&#xff08;上&#xff09; (1) YOLO11&#xff08;Ultralytics新作&#xff09; (1) YOLO11&#xff08;Ultralytics新作&#xff09; 2024.10.01 Ultralytics在 YOLO Vision 2024 活动上宣布发布其新的计算机视觉模型 YOLO…

千元级体验--希亦ACE迷你洗衣机测评分享,宝妈必备的性价比好物

​小孩子的衣物是不建议和大人衣物一起洗的&#xff0c;一方面是他们的免疫力比较低下&#xff0c;如果和大人混杂各种污渍病菌一起洗的话&#xff0c;容易有感染细菌的可能。而另一方面&#xff0c;小孩子特别是女婴的衣物&#xff0c;更要仔细注意&#xff0c;因为大人的衣物…

ad.concat()学习

学习1 import anndata as ad, pandas as pd, numpy as np from scipy import sparse a ad.AnnData(Xsparse.csr_matrix(np.array([[0, 1], [2, 3]])),obspd.DataFrame({"group": ["a", "b"]}, index["s1", "s2"]),varpd.D…

(作业)第三期书生·浦语大模型实战营(十一卷王场)–书生基础岛第3关---浦语提示词工程实践

基础任务 (完成此任务即完成闯关) 背景问题&#xff1a;近期相关研究发现&#xff0c;LLM在对比浮点数字时表现不佳&#xff0c;经验证&#xff0c;internlm2-chat-1.8b (internlm2-chat-7b)也存在这一问题&#xff0c;例如认为13.8<13.11。 任务要求&#xff1a;利用Lang…

[C++]使用纯opencv部署yolov11旋转框目标检测

【官方框架地址】 GitHub - ultralytics/ultralytics: Ultralytics YOLO11 &#x1f680; 【算法介绍】 YOLOv11是一种先进的对象检测算法&#xff0c;它通过单个神经网络实现了快速的物体检测。其中&#xff0c;旋转框检测是YOLOv11的一项重要特性&#xff0c;它可以有效地检…

vulnhub-digitalworld.local DEVELOPMENT靶机

vulnhub&#xff1a;digitalworld.local: DEVELOPMENT ~ VulnHub 导入靶机&#xff0c;放在kali同网段&#xff0c;扫描 靶机在192.168.114.129&#xff0c;扫描端口 开了几个端口&#xff0c;8080端口有网页&#xff0c;访问 说是让访问html_pages 似乎把页面都写出来了&…

FPGA时序分析和约束学习笔记(2、FPGA时序传输模型)

Tclk1TcoTdata < Tclk Tclk2 -Tsu Slack Tskew Tclk - Tsu - Tdata - Tco Skew时钟偏斜&#xff1a;时钟从源端口出发&#xff0c;到达目的寄存器和源寄存器的时间差值&#xff08;Tclk2-Tclk1&#xff09; Tsu建立时间&#xff1a;目的寄存器自身的特性决定&#xff…

掌握RocketMQ4.X消息中间件(一)-RocketMQ基本概念与系统架构

1 MQ介绍 MQ(Message Quene) : 翻译为 消息队列,别名为 消息中间件&#xff0c;通过典型的 生产者和消费者模型,生产者不断向消息队列中生产消息&#xff0c;消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的&#xff0c;而且只关心消息的发送和接收&#xff0c…

动态桌面时钟 让时间在桌面舞动 发现生活中的美好瞬间!

在快节奏的现代生活中&#xff0c;时间是最宝贵的资源之一。无论是在工作还是生活中&#xff0c;我们都需要时刻关注时间&#xff0c;在桌面显示一个时钟&#xff0c;可以让你更方便的掌握时间。今天小编给大家推荐一个软件《芝麻时钟》&#xff08;下载地址&#xff1a;https:…

vulnhub-DC 2靶机

vulnhub&#xff1a;DC: 2 ~ VulnHub 导入靶机&#xff0c;放在kali同网段&#xff0c;扫描 靶机在192.168.81.12&#xff0c;扫描端口 存在网站服务&#xff0c;访问&#xff0c;发现访问不到&#xff0c;做一下详细扫描 似乎是提示我们要用域名dc-2&#xff0c;编辑hosts文件…

(附源码)NodeJS社区独居老人健康管理系统-计算机毕设 21353

NodeJS社区独居老人健康管理系统 摘 要 随着科技的进步&#xff0c;信息技术已经深刻地影响了社会的各个领域。计算机的普及已经成为了不可或缺的一部分&#xff0c;它为我们提供了无限的可能性。 该社区独居老人健康管理系统提供了多种功能&#xff0c;包括查看首页、个人中…

【路径规划】移动机器人在未知环境下目标的路径规划算法

摘要 本文提出了一种新的路径规划算法&#xff0c;适用于在未知环境下的移动机器人。算法旨在帮助机器人从起点移动到目标点&#xff0c;同时避开环境中的障碍物。该算法基于势场方法&#xff0c;但解决了传统算法中常见的局部极小值问题&#xff0c;从而提高了路径规划的成功…

在线教育新篇章:SpringBoot系统开发策略

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

实例分割、语义分割和 SAM(Segment Anything Model)

实例分割、语义分割和 SAM&#xff08;Segment Anything Model&#xff09; 都是图像处理中的重要技术&#xff0c;它们的目标是通过分割图像中的不同对象或区域来帮助识别和分析图像&#xff0c;但它们的工作方式和适用场景各有不同。 1. 语义分割&#xff08;Semantic Segme…