【C/C++】解析 类成员属性

news2024/11/23 15:42:13

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c++系列专栏:C/C++零基础到精通 🔥

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

在这里插入图片描述

c语言内容💖:

专栏:c语言之路重点知识整合

【c语言】全部知识点总结


目录

  • 一、空类实例占用空间大小
  • 二、类成员属性
    • 对象地址
  • 二、类成员属性总结

一、空类实例占用空间大小

先创建一个空类:

class CTest
{

};

然后在主函数中使用CTest这个空类创建一个对象

并使用sizeof()函数计算这个空类创建的对象和空类的字节大小


int main()
{

	CTest test1;
	cout << sizeof(test1) << "    " << sizeof(CTest) << endl;

	return 0;
}

在这里插入图片描述

通过运行可以发现:空类对象和空类都占用1个字节的空间大小

这是因为:

C++标准规定,凡是一个独立的(非附属)对象都必须具有非零大小

所以一个空类即使没有任何数据存储其大小不能为0,空类实例占用内存的大小为1,是用来在内存中占位的


二、类成员属性

如果在类中定义一个类成员:

class CTest
{
public:
	int m_a;

};

在这里插入图片描述

再次运行字节数就为类成员int类型的4字节

sizeof(类型)表示,分配当前类型的变量所占用的空间大小
当一个类中存在非静态成员变量的时候,sizeof(类)占位用的一个字节就不会单独存在
因为变量的地址已经起到了占位、标识的作用;


对象地址

在主函数中再定义一个对象test2,输出查看两个对象的地址:

	CTest test1;
	CTest test2;

	cout << "对象test1的地址:" << &test1<< " 对象test2的地址:" << &test2 << endl;

在这里插入图片描述

不同的对象在内存中的地址不同!

二、类成员属性总结

当定义一个类时,其中的成员属性只是类的一分,在没有创建对象之前,这些属性并不存在的内存空间

通过创建对象来实例化类时,每个对象都有自己独立的成员属性。

在为每个对象分配内存空间时,会为对象的成员属性分配相应的内存

class CTest
{
public:
	int m_a;
};
int main()
{
	CTest test1;
	CTest test2;
	cout << "类成员test1的地址:" << &test1.m_a <<endl<< "类成员test2的地址:" << &test2.m_a << endl;
	return 0;
}

在这里插入图片描述

类成员属性:属于对象,当定义对象时,属性才会真正的存在(在内存中分配空间),才开辟对应的空间

多个对象会存在多份的成员属性(表现为在内存中的地址不同),彼此独立,互不扰


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

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

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

相关文章

JVM类加载双亲委派-JVM(二)

上篇文章说了java类的加载&#xff0c;验证、准备、解析、初始化。类的初始化必须是类加载完才执行&#xff0c;所以类的构造方法初始化是在静态方法之后执行。 JVM类加载机制-JVM&#xff08;一&#xff09; 一、类加载和双亲委派机制 前面类加载主要通过类加载器实现&…

JavaWeb小记——登录、注册

目录 登录项目 步骤 1.首先写一个前台页面&#xff0c;一个form表单——login.jsp 2.后台获取前台输入的参数&#xff0c;并作校验 3.写一个JDBC工具类&#xff0c;用来连接数据库&#xff0c;本案例使用Druid连接池 4.写一个登录工具类&#xff0c;在数据库中查询数据&…

【云原生】k8s的pod基础(上)

1.pod的相关知识 1.1 pod的基础概念 pod是kubernetes中最小的资源管理组件&#xff0c;Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是用绕着Pod来进行支撑和扩展Pod功能的&#xff0c;例如&#xff0c;用于管…

C++面试需求

一.auto 1.介绍&#xff1a; auto 是一个用于类型推导的关键字。它允许变量的类型在编译时根据其初始化值自动推断 例子&#xff1a; &#xff08;1&#xff09;自动类型推导变量 // C program to demonstrate working of auto // and type inference#include <bits/std…

shell正则入门

1.系统通配符 * #所有 . #当前目录 .. #当前目录的上一级目录 - #当前目录的上一次所在的目录 ~ #家目录 # #注释&#xff0c;超级管理员的命令行提示符 $ #引用变量&#xff0c;普通用户的命令行提示符 ? #匹配任意…

Spring Cloud Alibaba体系使用Nacos作为服务注册发现与配置中心

文章目录 Nacos介绍服务注册发现Nacos Discovery引入Nacos DiscoveryProvider和Consumer示例ProviderConsumer Nacos Discovery Starter其他配置选项 服务注册发现Nacos Config引入Nacos Config快速接入配置自动刷新profile粒度控制自定义namespace配置支持自定义Group支持自定…

UE5.2 LyraDemo源码阅读笔记(二)

UE5.2 LyraDemo源码阅读笔记&#xff08;二&#xff09; 创建了关卡中的体验玩家Actor和7个体验玩法入口之后。 接下来操作关卡中的玩家与玩法入口交互&#xff0c;进入玩法入口&#xff0c;选择进入B_LyraFrontEnd_Experience玩法入口&#xff0c;也就是第3个入口。触发以下请…

vue进阶-elementPlus

Element Plus官网 Element Plus 基于 Vue 3&#xff0c;面向设计师和开发者的组件库。减少开发者关注css&#xff0c;重心关注业务逻辑。 1. 入门 1.1 安装 npm install element-plus --save1.2 快速开始 1、main.js 引入并 use element-plus import { createApp } from …

C#,数值计算——灰色码(Gray Codes)的计算方法与源代码

一个 n位灰色码 序列&#xff0c;就是2的n次方 个 整数&#xff1b; 第一个数字为0&#xff1b; 相邻两个数字的二进制只有一位不一样&#xff1b; 第一个数字和最后一个数字的二进制也只有一位不一样。 using System; namespace Legalsoft.Truffer { /// <summary&…

ARM Exynos4412 硬件中断和GIC管理、PWM控制 6.28

day7 1.中断 硬件中断&#xff1a;直接让外部的硬件产生中断&#xff0c;CPU获取中断源并执行异常处理流程 1.需求&#xff1a;&#xff08;中断的原理一样&#xff0c;但外设是按键&#xff09;按键产生中断&#xff0c;并在中断处理中串口发送消息 2.原理图&#xff1a;U…

Mysql 5.6使用配置文件my.ini来设置长时间连接数据库

对于已经安装了mysql和未安装都是同样的步骤。在C:\Program Files (x86)\MySQL\MySQL Server 5.6下生成一个my.ini文件。然后删除或者修改my-default.ini的名字。 一、my.ini配置文件如下 [mysqld] basedirC:\Program Files (x86)\MySQL\MySQL Server 5.6 datadirC:\Program F…

STM32F407 基本定时器使用

介绍STM32F407基本定时器的配置方法&#xff0c;分别介绍轮询方式、中断方式使用定时器完成定时。 【1】定时器介绍 定时器相关的章节在STM32F4xx参考手册第14、15、16、17章节。 【2】基本定时器配置示例 增加一个Timer.c文件&#xff0c;代码如下 #include "timer.h…

【sql】SQL回顾总结,超级全

SELECT&#xff1a;语句用于从数据库中选取数据 从 "Websites" 表中选取 "name" 和 "country" 列 SELECT name,country FROM Websites 从 "Websites" 表中选取所有列 SELECT * FROM Websites; SELECT DISTINCT&#xff1a;用于返…

Nacos(一):简介 如何安装 服务注册与发现 集群 权重 与Eureka区别

一、简介 1、应用场景 当服务调用越来越多&#xff0c;服务的地址需要管理起来&#xff0c;并实现动态调用而不是硬编码在接口中。此时需要一个注册中心来帮助我们管理服务。 流程如下&#xff1a; 商品微服务注册IP和端口到注册中心订单微服务先从注册中心获取到商品微服务…

45 # 实现文件拷贝功能

下面实现边读边写的文件拷贝功能&#xff0c;这样不会淹没系统的可用内存&#xff0c;合理读写 const fs require("fs"); const path require("path");function copy(source, target, callback) {const SIZE 3;const buffer Buffer.alloc(SIZE);let r…

OPENCV 训练分类器一

第一步&#xff0c;安装OPENCV 见最新openCV-Python安装教程(opencv-python版本4.4.0, Python版本: 3.9)_python安装opencv_这个人不是画家的博客-CSDN博客 第二步&#xff0c;下面是修正过后的Python 将文件夹下面所有的图片转换成灰色小图像&#xff0c;用于存正片用的。…

Python几种字符串格式化方法

Python 字符串格式化方法 文章目录 Python 字符串格式化方法1.python中的字符串格式化--百分号 %2. 字符串格式化-数字精度控制 m.n3. 字符串格式化--快速写法 f"{变量}"4. 案例&#xff1a;股价计算小程序 1.python中的字符串格式化–百分号 % %的主要作用将数据转换…

android switch的使用

一、前言&#xff1a;很多app都有开关这个功能&#xff0c;开关控件的使用跟checkbox好像也差不多。 二、上代码 创建一个activity:SwitchDefaultActivity public class SwitchDefaultActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListene…

vue(脚手架创建)代理解决跨域问题

目录 为什么会出现跨域问题 什么是跨域 Vue CLI Vue2解决跨域问题 不重写路径 重写路径 vue.config.js代码 Vue3解决跨域问题 ViteVue解决跨域问题 vite.config.ts代码 总结 为什么会出现跨域问题 出于浏览器的同源策略的限制。同源策略是一种约定&#xff0c;它是…

【新版系统架构】第七章-系统架构设计基础知识(基于架构的软件开发方法)

软考-系统架构设计师知识点提炼-系统架构设计师教程&#xff08;第2版&#xff09; 第一章-绪论第二章-计算机系统基础知识&#xff08;一&#xff09;第二章-计算机系统基础知识&#xff08;二&#xff09;第三章-信息系统基础知识第四章-信息安全技术基础知识第五章-软件工程…