【小梦C嘎嘎——启航篇】类和对象(上篇)

【小梦C嘎嘎——启航篇】类和对象(上篇)😎

  • 前言🙌
    • 什么是面向过程?什么是面向对象?
      • 什么是类和对象
      • 类中的访问权限属性
      • 类的大小计算
      • this 指针
      • 构造函数
      • 析构函数
  • 总结撒花💞

追梦之旅,你我同行

   
😎博客昵称:博客小梦
😊最喜欢的座右铭:全神贯注的上吧!!!
😊作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主!

😘博主小留言:哈喽!😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘
在这里插入图片描述

前言🙌

    哈喽各位友友们😊,我今天又学到了很多有趣的知识现在迫不及待的想和大家分享一下!😘我仅已此文,分享有关** C++ 类和对象(上篇)的相关知识 **~ 都是精华内容,可不要错过哟!!!😍😍😍

什么是面向过程?什么是面向对象?

这里用一个点餐的实例来解释一下这两个概念。

在这里插入图片描述

简单来说,就是使用一个一个相互关联的函数来实现一些具体功能步骤的,则为面向过程;如果是通过调用一个个相互关联的类来实现的,则为面向对象。

什么是类和对象

在这里插入图片描述

  • 类好比是一张建筑图纸,可以实例化多个相互独立的对象。在每一个建筑里面,可以有公共区域厨房客厅,也可以有私人区域,个人卧室。

对象其实就是类的实例化。在C++中,struct和class都是可以表示类的。他们的一个显著的区别是:在struct 类体中,指定的默认权限是public(公有),而class默认是private (私有)。这样,使用class会更加安全一点。

类中的访问权限属性

  • public (公有)

  • private (私有)

  • protective(保护)

    如果设置的权限是private 和 protective ,则类外不能直接调用里面的成员函数或者成员变量。如果是public,则可以直接调用。在类内定义的成员函数,会将它是作为内联函数对待。

  • 类是不开辟空间的,当实例化后,才会进行分配空间操作。

这里函数不在对象里面,而在一个公共的代码区里面。d1.Init(2023, 7, 19);d1.Print() 和 d2.Init(2023, 7, 19)、d2.Print(); 都是调用同一个Print 和 Init函数。

// 实例化

class Date
{
public:
	void Init(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}

	void Print()
	{
		cout << _year << "/" << _month << "/" << _day << endl;
	}

//private:
	int _year;   // 声明
	int _month;
	int _day;
};

int main()
{
	// 定义开空间
	Date d1;
	d1.Init(2023, 7, 19);
	d1.Print();
	d1._year;

	Date d2;
	d2.Init(2023, 7, 19);
	d2.Print();
	d2._year;

	cout << sizeof(Date) << endl;//12
	cout << sizeof(d1) << endl;//12 
    //这里函数不在对象里面,而在一个公共的代码区里面。d1.Init(2023, 7, 19);d1.Print() 和 d2.Init(2023, 7, 19)、d2.Print(); 都是调用同一个Print 和 Init函数。

	return 0;
}


类的大小计算

  • 类中既有变量也有函数

  • 类中仅有成员函数

  • 类中什么都没有空类

成员函数不存储在类中,而是存储在公共的代码区。对于只有成员函数的类和空类,是会开辟空间的,通常是开一个字节(byte)空间,不存储数据,只是进行占位,表示对象存在。

  • 在计算内存时,会遵守内存对齐的规则,成员函数是不存在对象里面的,而是位于代码区中。

  • 结构体怎么对齐?为什么要进行内存对齐?
    答:我的理解是:结构体大概是这样进行内存对齐的,首先是结构体中第一个成员是从地址为0的偏移处开始存放。在存放时,要对齐到其自身的对齐数处。对齐数 = 编译器默认的一个对齐数与该成员大小的较小值。在VS中,默认对齐数是8 。结构体总大小为最大对齐数的整数倍。(最大对齐数:每一个成员的对齐数与默认对齐数的最小值)。如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,

this 指针

指向当前调用对象的指针。this指针不能在函数的形参和实参中显示写出,但是可以在类中显示写出。在成员函数中会有一个隐含的this指针(类名 * const this)

这里的图还是不够准确,应该是Data* const this。

需要注意的是:

  • 每一个成员函数的this是两个不同的形参变量,他们的值取决于调用的对象是否相同。

  • 如果调用的对象相同,则调用相同的函数产生的结果是相同的。

  • this 是存储在堆栈上的,不是存储在对象里面的。

构造函数

  • 构造函数是用来对对象初始化的,并非是为对象开辟空间的。
  • 构造函数的函数名与类名相同。
  • 无返回值类型,不用写void
  • 一个类中可以有多个构造函数,也就是构造函数是可以实现重载的。
  • 在定义对象时,会自动调用构造函数,对对象进行初始化操作。
  • 构造函数是类的默认成员函数,如果自己没有写,编译器会默认生成一个无参的构造函数。
  • 默认构造函数:无参的构造函数、全缺省的构造函数、自己没写编译器自动生成的构造函数。在一个类中,有且只有一个默认构造函数。当有多个时,会出现调用冲突。

析构函数

  • 析构函数是用来进行对对象资源的清理工作,而不是用来销毁对象,销毁对象是程序结束系统自动销毁回收空间的。
  • 析构函数的函数名与类名相同。
  • 无返回值也无参数。
  • 一个类中只能有一个析构函数,不能实现重载。
  • 在程序结束时,编译器会自动先调用析构函数。
  • 构造函数是类的默认成员函数,如果自己没有写,编译器会默认生成一个无参的构造函数。

总结撒花💞

   本篇文章旨在分享的是【小梦C嘎嘎——启航篇】类和对象(上篇)知识。希望大家通过阅读此文有所收获
   😘如果我写的有什么不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘😘😘

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

redis(12):springboot使用redis注解做缓存

1 新建springboot项目 2 相关注解 @EnableCaching 在启动类上加上注解启动缓存 #作用在你要缓存的数据上 @Cacheable(key="#id",cacheNames="com.sxt.service.impl.MenuServiceImpl") @Cacheput 解决脏读 @CachEvict(解决脏读) @Cacheconfig(全…

Reinforcement Learning with Code 【Chapter 9. Policy Gradient Methods】

Reinforcement Learning with Code This note records how the author begin to learn RL. Both theoretical understanding and code practice are presented. Many material are referenced such as ZhaoShiyu’s Mathematical Foundation of Reinforcement Learning, . 文章…

【COlor传感器】通过扰动调制光传感实现智能光传输的占用分布估计研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Mysql 数据库开发及企业级应用

文章目录 1、Mysql 数据库开发及企业级应用1.1、为什么要使用数据库1.1.1、数据库概念&#xff08;Database&#xff09;1.1.2、为什么需要数据库 1.2、程序员为什么要学习数据库1.3、数据库的选择1.3.1、主流数据库简介1.3.2、使用 MySQL 的优势1.3.3、版本选择 1.4、Windows …

神码ai火车头伪原创插件怎么用【php源码】

大家好&#xff0c;本文将围绕python绘制烟花特定爆炸效果展开说明&#xff0c;如何用python画一朵花是一个很多人都想弄明白的事情&#xff0c;想搞清楚用python画烟花的代码需要先了解以下几个事情。 1、表白烟花代码 天天敲代码的朋友&#xff0c;有没有想过代码也可以变得…

python与深度学习(十):CNN和cifar10二

目录 1. 说明2. cifar10的CNN模型测试2.1 导入相关库2.2 加载数据和模型2.3 设置保存图片的路径2.4 加载图片2.5 图片预处理2.6 对图片进行预测2.7 显示图片 3. 完整代码和显示结果4. 多张图片进行测试的完整代码以及结果 1. 说明 本篇文章是对上篇文章训练的模型进行测试。首…

Java IO,BIO、NIO、AIO

操作系统中的 I/O 以上是 Java 对操作系统的各种 IO 模型的封装&#xff0c;【文件的输入、输出】在文件处理时&#xff0c;其实依赖操作系统层面的 IO 操作实现的。【把磁盘的数据读到内存种】操作系统中的 IO 有 5 种&#xff1a; 阻塞、 非阻塞、【轮询】 异步、 IO复…

【java的类型数据】——八大类型数据

文章目录 前言字面常量字面常量的分类: 数据类型和变量变量的包装类和范围范围整型变量byteintshortlong 浮点型变量双精度浮点型double单精度浮点型float 字符型变量char布尔型变量 boolean 类型转换自动类型转换&#xff08;隐式&#xff09;强制类型转换&#xff08;显式&am…

Android跨进程传大图思考及实现——附上原理分析

1.抛一个问题 这一天&#xff0c;法海想锻炼小青的定力&#xff0c;由于Bitmap也是一个Parcelable类型的数据&#xff0c;法海想通过Intent给小青传个特别大的图片 intent.putExtra("myBitmap",fhBitmap)如果“法海”(Activity)使用Intent去传递一个大的Bitmap给“…

排序链表——力扣148

文章目录 题目描述法一 自顶向下归并排序法二&#xff09;自底向上归并排序 题目描述 题目的进阶问题要求达到 O(nlogn) 的时间复杂度和 O(1) 的空间复杂度&#xff0c;时间复杂度是 O(nlogn) 的排序算法包括归并排序、堆排序和快速排序&#xff08;快速排序的最差时间复杂度是…

推荐带500创作模型的付费创作V2.1.0独立版系统源码

ChatGPT 付费创作系统 V2.1.0 提供最新的对应版本小程序端&#xff0c;上一版本增加了 PC 端绘画功能&#xff0c; 绘画功能采用其他绘画接口 – 意间 AI&#xff0c;本版新增了百度文心一言接口。 后台一些小细节的优化及一些小 BUG 的处理&#xff0c;前端进行了些小细节优…

【Java面试丨企业场景】常见技术场景

一、单点登录怎么实现的 1. 介绍 单点登录&#xff08;Single Sign On&#xff0c;SSO&#xff09;&#xff1a;只需要登录一次&#xff0c;就可以访问所有信任的应用系统 2. 解决方案 JWT解决单点登录问题 用户访问应用系统&#xff0c;会在网关判断Token是否有效如果Tok…

极简并优雅的在IDEA使用Git远程拉取项目和本地推送项目

连接Git 搜索Git然后将你下载好的Git的文件目录位置给他弄进去就行 本地分支管理 分支管理通常是在IDEA的右下角找到 连接远程仓库 方法1本地项目推送到远程仓库 如果当前项目还没交给Git管理的则按照以下图所示先将项目交给Git管理 然后此时文件都会是红色的&#xff0c;这表…

《向量数据库指南》:向量数据库Pinecone如何集成LangChain (一)

目录 LangChain中的检索增强 建立知识库 欢迎使用Pinecone和LangChain的集成指南。本文档涵盖了将高性能向量数据库Pinecone与基于大型语言模型(LLMs)构建应用程序的框架LangChain集成的步骤。 Pinecone使开发人员能够基于向量相似性搜索构建可扩展的实时推荐和搜索系统…

Meta分析的选题与文献计量分析CiteSpace应用丨R语言Meta分析【数据清洗、精美作图、回归分析、诊断分析、不确定性及贝叶斯应用】

目录 ​专题一、Meta分析的选题与文献计量分析CiteSpace应用 专题二、Meta分析与R语言数据清洗及相关应用 专题三、R语言Meta分析与精美作图 专题四、R语言Meta回归分析 专题五、R语言Meta诊断分析与进阶 专题六、R语言Meta分析的不确定性及贝叶斯应用 专题七、深度拓展…

零信任网络架构与实现技术的研究与思考

目前&#xff0c;国外已有较多有关零信任网络的研究与实践&#xff0c;包括谷歌的 BeyondCorp、BeyondProd&#xff0c;软件定义边界&#xff08;Software Defined Perimeter&#xff0c;SDP&#xff09; 及盖特提出的“持续自适应风险与信任评估”等。国内也有不少安全厂商积极…

Istio网关Gateway 启用TLS

Istio网关Gateway概述 Istio网关Gateway是一个负责处理南北向流量的组件&#xff0c;它通常会暴露服务网格内部的服务&#xff0c;以便外部的请求能够访问到服务网格中的服务。Istio网关Gateway支持多种协议&#xff0c;包括HTTP、HTTPS和GRPC等。 在Istio网关Gateway中&#…

DevOps-Jenkins

Jenkins Jenkins是一个可扩展的持续集成引擎&#xff0c;是一个开源软件项目&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件的持续集成变成可能。 官网 应用场景 场景一 研发人员上传开发好的代码到github代码仓库需要将代码下载nginx服务器部署手动下载再…

C++之poll与epoll总结(一百六十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

优化基于tcp,socket的ftp文件传输程序

原始程序&#xff1a; template_ftp_server_old.py&#xff1a; import socket import json import struct import os import time import pymysql.cursorssoc socket.socket(socket.AF_INET, socket.SOCK_STREAM) HOST 192.168.31.111 PORT 4101 soc.bind((HOST,PORT)) p…