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

news2024/9/30 17:27:40

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

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

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

相关文章

自动化测试——APP测试

一、环境配置 1、安装jdk 配置环境变量 2、Android SDK 环境安装 3、Appium Server安装 4、模拟器安装 5、安装appium-python-client Python第三方库 二、APP自动化测试原理 三、Desired Capabilites——APPium自动化配置项 1、设置参数 2、操作系统 3、选择版本 4、设备名称…

LeetCode 1857. Largest Color Value in a Directed Graph【拓扑排序,动态规划】困难

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

【LeetCode】148.排序链表

题目 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4]示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5]示例 3&#xff1…

Go 下载安装教程

1. 下载地址&#xff1a;The Go Programming Language (google.cn) 2. 下载安装包 3. 安装 &#xff08;1&#xff09;下一步 &#xff08;2&#xff09;同意 &#xff08;3&#xff09;修改安装路径&#xff0c;如果不修改&#xff0c;直接下一步 更改后&#xff0c;点击下一…

软件测试/测试开发丨Selenium环境安装与使用

Selenium 官方网站&#xff1a; www.selenium.dev/ 简介&#xff1a; 用于web浏览器测试的工具&#xff1b;支持的浏览器包括IE&#xff0c;Firefox&#xff0c;Safari&#xff0c;Chrome&#xff0c;Edge等&#xff1b;使用简单&#xff0c;可使用Java&#xff0c;Python等…

InnoDB引擎底层逻辑讲解——逻辑存储结构

逻辑存储结构架构事务原理MVCC 1.逻辑存储结构 InnoDB逻辑存储结构图 mysql数据文件存储位置(linux系统) cd /var/lib/mysql一个mysql实例中有多个表空间&#xff0c;我们切换到某一个特定的数据库如itcast数据库&#xff0c;每个ibd文件都是一个表空间&#xff0c; cd it…

使用pikachu管理工具下的XSS后台进行实战

写在前面的重要提示&#xff1a; Attention&#xff1a;技术没有好坏之分&#xff0c;关键在于使用技术的人或组织。网络安全技术是一把双刃剑 – 作为网络安全人&#xff0c;虽然无法控制头上的帽子是否会变绿&#xff0c;但能控制不让它变黑&#xff1b;无论我们在物质上面对…

Cilium 系列-7-Cilium 的 NodePort 实现从 SNAT 改为 DSR

系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能。但是通过对 Cilium 不同模式的切换/功能的启用&#xff0c;可以进一步提升 Cilium 的网络性能。具体调优项包括不限于&#xff1a; 启用本地路由 (Native Rou…

精读《自由布局吸附线的实现》

目录 判断 box 离哪条边最近 产生吸附效果 resize 时中间对齐线需要放大双倍吸附力 总结 自由布局吸附线的效果如下图所示&#xff1a; 那么如何实现吸附线呢&#xff1f;我们先归纳一下吸附线的特征&#xff1a; 正在拖动的 box 与其他 box 在水平或垂直位置距离接近时&am…

Spring之BeanDefinition(二)

Spring之BeanDefinition 文章目录 Spring之BeanDefinition1、对象和bean的区别2、BeanDefinition作用AutowireCandidate说明Primary说明ConstructorArgumentValues说明第一种使用方式第二种使用方式 MutablePropertyValuesabstract小结 3、BeanDefinition的发展历程3、BeanDefi…

RedHat7.9安装mysql8.0.32 ↝ 二进制方式

RedHat7.9安装mysql8.0.32 ↝ 二进制方式 一、rpm方式安装1、检查是否安装了mariadb2、下载mysqlmysql8.0.323、上传解压4、创建安装目录&#xff0c;拷贝解压后的文件至安装目录/usr/local/mysql8.0/5、创建相关目录&#xff0c;开始安装6、创建mysql组和用户7、更改安装目录归…

SpringAOP的相关概念

文章目录 一.什么是AOP二.AOP的组成部分三.SpringAOP的实现3.1 增加SpringAOP依赖3.2 创建切面3.2 创建切点3.3 创建通知3.4 创建连接点 四.SpringAOP的实现原理4.1 JDK动态代理4.2 CGLIB 动态代理总结 一.什么是AOP AOP&#xff0c;全称为Aspect-Oriented Programming&#x…

创建jupyterlab的快捷启动的一种方式

1、找Jupyter Notebook的快捷图标 首先&#xff0c;找到Jupyter Notebook的快捷图标&#xff0c;打开其文件位置。 2、复制Jupyter Notebook快捷方式 复制Jupyter Notebook的快捷方式 将复制Jupyter Notebook的快捷方式的这两处的Noetbook修改为lab。 如下图 3、找Jupy…

RocketMQ概论

目录 前言&#xff1a; 1.概述 2.下载安装、集群搭建 3.消息模型 4.如何保证吞吐量 4.1.消息存储 4.1.1顺序读写 4.1.2.异步刷盘 4.1.3.零拷贝 4.2.网络传输 前言&#xff1a; RocketMQ的代码示例在安装目录下有全套详细demo&#xff0c;所以本文不侧重于讲API这种死…

Git的常用命令以及使用场景

文章目录 1.前言2.工作区,暂存区,版本库简介3.Git的常用命令4.版本回退5.撤销修改6.删除文件7.总结 1.前言 在学习Git命令之前,需要先了解工作区,暂存区和版本库这三个概念 2.工作区,暂存区,版本库简介 在使用Git进行版本控制时&#xff0c;有三个重要的概念&#xff1a;工作…

day48-ajax+SSM分页

AjaxSSM分页 非分页版controller及html&#xff1a; 分页模糊查询controller&#xff1a; Postman测试&#xff08;无网页&#xff09;&#xff1a; 分页网页&#xff1a; 分页网页中添加模糊查询&#xff1a; 分页网页中实现添加功能&#xff1a; &#xff08;1&am…

VUE3-04

1. 编写代码过程中的问题与解决 1.1 错误&#xff1a;cant read property of undefined(name) &#xff08;1&#xff09;首先定位错误的位置 &#xff08;2&#xff09;逐一排查问题&#xff1a;注释代码&#xff1b;debugger&#xff1b;console.log &#xff08;3&#xff0…

10.Docker安全和https

文章目录 Docker安全Docker存在的安全问题Docker架构缺陷与安全机制Docker 安全基线标准Docker安全总结 HTTPSHTTPS访问过程生成证书方式openssL生成证书过程 Docker安全 容器的安全性问题的根源在于容器和宿主机共享内核。如果容器里的应用导致Linux内核崩溃&#xff0c;那么…

Spring Tool Suite 4

参考&#xff1a;Spring tool suite4 安装及配置_springtoolsuite4_猿界零零七的博客-CSDN博客 下载&#xff1a;Spring | Tools 将下载的JAR进行解压两次&#xff0c;直至解压出contents中的sts 双击启动 第一次打开需要指定工作区文件夹 配置Maven的config 安装插件

C++ new/delete的使用

1.虚拟地址空间 可执行程序&#xff08;进程&#xff09;的虚拟地址空间&#xff1a; 内核&#xff1a;操作系统 栈区&#xff1a;函数的形参&#xff0c;非静态的局部变量&#xff0c;函数现场保护数据等等&#xff0c;栈是向下增长的&#xff0c;栈顶是低地址&#xff0c;栈…