【小梦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;//12cout << 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嘎嘎——启航篇】类和对象(上篇)知识。希望大家通过阅读此文有所收获
   😘如果我写的有什么不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘😘😘

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

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

相关文章

Node.js介绍;浏览器和Node.j架构区别;Node的安装与管理;JS代码执行方式;Node的输入与输出;全局对象;

目录 1_Node.js介绍1.1_概念1.2_浏览器和Node.j架构区别1.3_Node.js应用场景 2_Node的安装与管理2.1_安装2.2_Node的版本工具2.3_版本管理工具&#xff1a;n 3_JavaScript代码执行4_Node的输入与输出4.1_REPL4.2_Node程序传递参数4.3_Node的输出 5_全局对象5.1_常见的全局对象5…

FreeRTOS学习之路,以STM32F103C8T6为实验MCU(2-1:任务)

学习之路主要为FreeRTOS操作系统在STM32F103&#xff08;STM32F103C8T6&#xff09;上的运用&#xff0c;采用的是标准库编程的方式&#xff0c;使用的IDE为KEIL5。 注意&#xff01;&#xff01;&#xff01;本学习之路可以通过购买STM32最小系统板以及部分配件的方式进行学习…

大数据实时链路备战 —— 数据双流高保真压测 | 京东云技术团队

一、大数据双流建设 1.1 数据双流 大数据时代&#xff0c;越来越多的业务依赖实时数据用于决策&#xff0c;比如促销调整&#xff0c;点击率预估、广告分佣等。为了保障业务的顺利开展&#xff0c;也为了保证整体大数据链路的高可用性&#xff0c;越来越多的0级系统建设双流&…

java之juc

juc是java.util.current的简写&#xff0c;意思是并发编程。 锁是什么&#xff1f;如何判断锁的是谁&#xff1f; 生产者和消费者问题 synchronized版本 package com.demo.juc.pc;/*** 线程之间的通信问题&#xff0c;生产者和消费者问题&#xff01;* 线程交替执行** a b …

ubuntu初始化/修改root密码

1.登录ubuntu后&#xff0c;使用sudo passwd root命令&#xff0c;进行root密码的初始化/修改&#xff0c;注&#xff1a;这里需要保证两次输入的密码都是同一个&#xff0c;才可成功 ubuntugt-ubuntu22-04-cmd-v1-0-32gb-100m:~/ocr$ sudo passwd root New password: Retype…

Docker 安全 Docker HTTPS请求过程与配置

Docker 容器安全注意点 尽量别做的事 尽量不用 --privileged 运行容器&#xff08;授权容器root用户拥有宿主机的root权限&#xff09; 尽量不用 --network host 运行容器&#xff08;使用 host 网络模式共享宿主机的网络命名空间&#xff09; 尽量不在容器中运行 ssh 服务 尽…

文件按关键字分组-切割-染色-写入excel

1. 背景 针对下面的文件data.csv&#xff0c;首先根据fid进行排序&#xff0c;然后分组&#xff0c;使相同fid的记录放到同一个excel文件中&#xff0c;并对每列重复的数据元素染上红色。 fid,user_id -1000078398032092029,230410010036537520 -1000078398032092029,23042301…

Gitlab 备份与恢复

备份 1、备份数据&#xff08;手动备份&#xff09; gitlab-rake gitlab:backup:create2、备份数据&#xff08;定时任务备份&#xff09; [rootlocalhost ]# crontab -l 00 1 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create 说明&#xff1a;每天凌晨1点备份数据…

什么是 HTTP 长轮询?

什么是 HTTP 长轮询&#xff1f; Web 应用程序最初是围绕客户端/服务器模型开发的&#xff0c;其中 Web 客户端始终是事务的发起者&#xff0c;向服务器请求数据。因此&#xff0c;没有任何机制可以让服务器在没有客户端先发出请求的情况下独立地向客户端发送或推送数据。 为…

Docker 全栈体系(八)

Docker 体系&#xff08;高级篇&#xff09; 六、Docker轻量级可视化工具Portainer 1. 是什么 Portainer 是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便地管理Docker环境&#xff0c;包括单机环境和集群环境。 2. 安装 官网 https://www.portain…

计算机视觉常用数据集介绍

1 MINIST MINIST 数据集应该算是CV里面最早流行的数据了&#xff0c;相当于CV领域的Hello World。该数据包含70000张手写数字图像&#xff0c;其中60000张用于train&#xff0c; 10000张用于test&#xff0c; 并且都有相应的label。图像的尺寸比较小&#xff0c; 为28x28。 数…

数据安全

数据的备份与恢复 1. 数据备份技术 任何数据在长期使用过程中&#xff0c;都存在一定的安全隐患。由于认为操作失误或系统故障&#xff0c;例如认为错误、程序出错、计算机失效、灾难和偷窃&#xff0c;经常造成数据丢失&#xff0c;给个人和企业造成灾难性的影响。在这种情况…

DPN(Dual Path Network)网络结构详解

论文&#xff1a;Dual Path Networks 论文链接&#xff1a;https://arxiv.org/abs/1707.01629 代码&#xff1a;https://github.com/cypw/DPNs MXNet框架下可训练模型的DPN代码&#xff1a;https://github.com/miraclewkf/DPN 我们知道ResNet&#xff0c;ResNeXt&#xff0c;D…

Android启动速度优化

本节主要内容&#xff1a;了解APP启动流程、启动状态、查看启动时间、CPU Profile定位启动耗时代码、StrictMode严苛模式检测不合理写法、解决启动黑白屏问题。 一、APP启动流程 ①用户点击桌面App图标&#xff0c;Launcher进程采用Binder IPC向system_server进程发起startAc…

DHCP部署与安全详解

文章目录 一、DHCP是什么&#xff1f;二、DHCP相关概念三、DHCP优点四、DHCP原理1. 客户机发送DHCP Discovery广播包&#xff08;发现谁是DHCP服务器&#xff09;2. 服务器响应DHCP Offer广播包3. 客户机发送DHCP Request广播包4. 服务器发送DHCP ACK广播包 五、DHCP续约六、部…

lc209.长度最小的子数组

暴力破解&#xff1a;二次for循环遍历num[i]...num[j]&#xff0c;记录满足条件的最小长度 前缀和二分&#xff1a;前缀和降低计算num[i]...num[j]的时间复杂度 对前缀和数组中的每个数进行遍历&#xff0c;找到距离这个数满足条件的最小长度 前缀和数组单调递增&#xff0c;此…

【JAVA】java中的逻辑控制

作者主页&#xff1a;paper jie的博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精…

不同情境下沟通有哪些可用的工具箱?

在不同情境下&#xff0c;沟通的工具箱可以包括以下几个方面&#xff1a; 面对面交流&#xff1a;面对面交流是最直接和有效的沟通方式。可以通过面对面的会议、面谈或小组讨论等方式进行沟通。面对面交流可以更好地传递情感和非语言信息&#xff0c;有助于建立信任和理解。 …

SQL-每日一题【620.有趣的电影】

题目 某城市开了一家新的电影院&#xff0c;吸引了很多人过来看电影。该电影院特别注意用户体验&#xff0c;专门有个 LED显示板做电影推荐&#xff0c;上面公布着影评和相关电影描述。 作为该电影院的信息部主管&#xff0c;您需要编写一个 SQL查询&#xff0c;找出所有影片…

谈一谈缓存穿透,击穿,雪崩

缓存穿透 缓存穿透是指在使用缓存系统时&#xff0c;频繁查询一个不存在于缓存中的数据&#xff0c;导致这个查询每次都要通过缓存层去查询数据源&#xff0c;无法从缓存中获得结果。这种情况下&#xff0c;大量的请求会直接穿透缓存层&#xff0c;直接访问数据源&#xff0c;…