当前位置: 首页 > news >正文

类的实例化

类的实例化

class Date
{
public:void Init(int year, int month, int day){_year = year;_month = month;_day = day;}private:int _year;int _month;int _day;     //这只是函数的一个声明并没有定义
};

上面是一个类,我们可以把有花括号括起来的叫做一个域,所以我们叫可以叫上面的Date叫类域
既然是域,那我们可以用访问域的方法来访问上面的类域吗?
我们试一试:

我们输入:Date::_year;

发现编译器会报错。
在这里插入图片描述
在这里插入图片描述

这是为什么?

因为类中:只是变量的一个声明而已,并不是变量的定义。

变量的定义会开空间,而只是声明则不会开辟空间

所以我们定义一下就可以解决这个问题:

那什么时候才是定义呢?

Date d

这样就行了,对象的定义也就叫对象的实例化

这样就会开空间出来。
在这里插入图片描述

下面我们思考一个问题:类Date 和类实例化后的对象:d1 所占的空间是多少?

#include<iostream>
using namespace std;
class Date
{
public:void Init(int year, int month, int day){_year = year;_month = month;_day = day;}private:int _year;    //int 整型 4个字节int _month;int _day;     
};int main()
{Date d1;d1.Init(2023, 7, 9);Date d2;cout << sizeof(Date) << endl;cout << sizeof(d1) << endl;return 0;
}

答案是12 还是 16 ?

在这里插入图片描述
你会感到疑惑,private中的三个整型加起来就是12了,还有一个函数呢?,难道函数不死存放在这个类里面的吗?

是的,为了避免空间的浪费,会把函数存在公共的代码区

判断一下,下面的类有多少个字节?

//类中既有成员函数又有函数变量
class A1 {
public:void f1() {}
private:int _a;
};// 类中仅有成员函数
class A2 {
public:void f2() {}
};
// 类中什么都没有---空类
class A3
{};

sizeof 输出的结果是:

cout << sizeof(A1) << endl;cout << sizeof(A2) << endl;cout << sizeof(A3) << endl;

在这里插入图片描述

为啥,你说A1是4都还好理解,但是A2,A3是怎么回事?
之前说过成员函数不是存放在类里面的,所以A2中有个成员函数不影响。
A2 和 A3 的字节数是一样的,但是,为什么是1 不是 0 ?
A3 中啥都没有呀?
因为 这一个字节是用来占位 的。c++ 针对这种没有成员变量的类,给它分配了一个字节用来占位, 这一个字节并不是用来存储数据的,只是表示这个类存在过。

http://www.lryc.cn/news/104368.html

相关文章:

  • 智能提词器有哪些?了解一下这款提词工具
  • oracle 19c rac环境配置firewalld
  • Flutter 之Bloc入门指南实现倒计时功能
  • 目标识别数据集互相转换——xml、txt、json数据格式互转
  • 211. 添加与搜索单词 - 数据结构设计---------------字典树
  • SQL Server通过指令备份数据库和恢复数据库
  • windows如何上架ios应用到app store
  • Hadoop学习日记-YARN组件
  • 汽车过户时,怎么选到理想的好车牌?
  • 力扣468 验证IP地址
  • 前端静态登录页面实现
  • 华为数通HCIA-网络参考模型(TCP/IP)
  • java快速生成数据库表文档(HTML、DOC、MD)
  • Dojo学习和常用知识
  • 媒体查询详解
  • 华为数通HCIP-IGMP(网络组管理协议)
  • 价格管控有哪些有效的方法
  • 【Docker】Docker相关基础命令
  • 掌握Python的X篇_16_list的切片、len和in操作
  • 给定长度值length,把列表切分成每段长度为length的N段列表,Kotlin
  • leetcode每日一题Day2——344. 反转字符串
  • ISP记1
  • 无线蓝牙耳机有什么值得耳机买的?几款值得买的口碑品牌盘点
  • 异步检索在 Elasticsearch 中的理论与实践
  • 了解Unity编辑器之组件篇Physics 2D(十二)
  • [Pytorch]手写数字识别——真·手写!
  • android studio 找不到符号类 Canvas 或者 错误: 程序包java.awt不存在
  • AWS——02篇(AWS之服务存储EFS在Amazon EC2上的挂载——针对EC2进行托管文件存储)
  • FFmpeg 打包mediacodec 编码帧 MPEGTS
  • 软件测试如何推进项目进度?