C++类和对象详解(上)

类的引入

由于内容十分之多所以类和对象我将分成三期去讲解
在C语言中,描绘一类对象的的属性时,我们会使用结构体,在结构体重定义该对象的特征,如一个学生。

struct student
{
char name[20];
int age;
char sex[10];
//...
};

而在C++中,引入了类这个概念。
类是一种用户自定义的数据类型,它可以包含数据成员和成员函数。数据成员是类的属性,描述了类的特征;成员函数是类的行为,描述了类的操作。类可以看作是一个模板,它定义了对象的结构和行为。
简单来说就是功能更加强大的升级版结构体。
类的关键字:class

class student {
	int age;
	char name[20];
	char sex[10];
	//...可以添加成员函数和成员变量
};

访问限定符

类的成员可以用访问限定符设置属性:public(公有),private(私有),protected(保护)
公有属性的成员可以从外界访问,而私有和保护属性的成员不能从外界访问(目前两者差别暂不区分以后再讲)。
展示:

  class student {
   public:
			 int getage()//访问权限作用域从该访问限定符出现的位置开始
			 //直到下一个访问限定符出现时为止即从public到private之间全部都是共有的
			 
			 {
				 return age;
			 }
         private:
	    int age;
	    char name[20];
	    char sex[10];
     };
	int main()
	{
		student a = {0,0,0};
		cout << a.age;
	return 0;
	}

这样写程序会报错,因为age是私有属性的成员,所以不能够从外界访问。


   class student {
         public:
	    int age;
	    char name[20];
	    char sex[10];
     };
	int main()
	{
		student a = {0,0,0};
		cout << a.age;
	return 0;
	}

这样写就不会有任何问题。(内部默认是私有权限所以记得public)
对象是类的实例化,是类的具体实体。通过创建对象,可以使用类的属性和操作。对象可以访问类中的公有成员函数和公有数据成员。

类的大小

类是一种构造类型,大小的计算方法和struct一样,需要字节对齐。
成员函数是不占空间的,所以不需要计算成员函数的大小。(如果类没有成员变量那么编译器就会给空类一个字节来唯一标识这个类的对象即大小为1字节)。
如下:

    class studenta {
         
	   	
		int _age;
		char _name[20];
		char _sex[10];
     };
	class studentb {
	public:
		int getage()
		{
			return _age;
		}
		int _age;
		char _name[20];
		char _sex[10];
	};
	class studentc {
         public:
			 int getage()
			 {
				 return 1;
			 }
	  
     };
	int main()
	{
		studenta a ;
		studentb b ;
		studentc c ;
		cout << sizeof(a)<<" "<<sizeof(b)<<" "<<sizeof(c);
	return 0;
	}

按照刚才的逻辑输出的结果就应该如下:
在这里插入图片描述
(36的由来:首先age是int占4个字节,此时的对齐数为4,然后name占20个字节,然后sex占10个字节,加起来是34不是4的倍数所以要对齐变为36,实在不知道怎么算的可以去看我之前讲结构体的博客)

this指针

this是一个关键词,是一个(类的名字)*const的指针,在类的成员函数中,每个成员函数都有一个隐藏的参数,就是this指针指针指向当前对象(函数运行时调用该函数的对象)。如下:

class studenta {
	public:
		int getage()//首先这里隐藏了一个参数 studenta* this
		{
			return _age;//这里看上去是_age实际上编译器会自动在其前面加上this指针等价于this->_age
			//在每一个成员函数体内所有成员变量的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成
		}
		int _age;
		char _name[20];
		char _sex[10];
	};

this指针的特性:
1,不能给this指针赋值(因为有const属性)。
2,this指针本质上其实是一个成员函数的第一个形参,是对象调用函数时,将对象的地址作为实参传给this指针,,所以对象中不存储this指针。
3,this指针存放在栈上(因为是形参,形参们都存放在栈上)
4,只能在成员函数内部使用
5,this 指针可以为空,我们可以在类外部定义一个类类型指针,将该指针初值为空 ,然后将其作为实参传入this指针形参中。如下:

class studenta {
	public:
		int getage()
		{
			return 1;
		}
		int age;
		char name[20];
		char sex[10];
	};
	
	int main()
	{
		studenta* a = NULL;
		cout << a->getage();
	return 0;
	}

这个程序输出的结果为1,当this指针为空时,如果成员函数没有调用成员变量,那么代码不会崩溃,否者代码就会崩溃。如果我把返回值变为_age那么程序就会崩溃。

小结

本次我们简单的先带大家把类和对象入个门,下一期再继续深入讲解C++的类和对象,如果觉得博主讲的不错的话请关注博主给一个免费的点赞和收藏吧!我们下期再见!

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

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

相关文章

Maven介绍

1.什么是Maven Maven是一个针对Java项目的构建和依赖管理工具。 具体来说&#xff0c;Maven 提供了一系列用于项目管理的功能&#xff0c;包括但不限于&#xff1a; 依赖管理&#xff1a;通过pom.xml文件&#xff0c;Maven 可以自动处理项目所需的所有依赖库&#xff0c;简化…

基于Vue.js和D3.js的智能停车可视化系统

引言 随着物联网技术的发展&#xff0c;智能停车系统正逐渐普及。前端作为用户交互的主要界面&#xff0c;对于提供直观、实时的停车信息至关重要。 目录 引言 一、系统设计 二、代码实现 1. 环境准备 首先&#xff0c;确保您的开发环境已经安装了Node.js和npm。然后&…

华为综合案例-普通WLAN全覆盖配置(2)

组网图 结果验证 在AC_1和AC_2上执行display ap all命令&#xff0c;检查当前AP的状态&#xff0c;显示以下信息表示AP上线成功。[AC_1] display ap all Total AP information: nor : normal [1] ExtraInfo : Extra information P : insufficient power supply ---…

Naocs-config配置中心知识点

1、配置中心特点 方便维护&#xff0c;时效性&#xff0c;安全性。 只要更改了配置文件&#xff0c;微服务可以在极短的时间内更新配置并应用。 2、配置文件命名规则 2.1DataID {spring.application.name}-{spring.profile.active}.{spring.cloud.nacos.config.file-extens…

数据仓库相关概述

数据仓库概述 数据仓库概念 数据仓库是一个为数据分析而设计的企业级数据管理系统。数据仓库可集中、整合多个信息源的大量数据&#xff0c;借助数据仓库的分析能力&#xff0c;企业可从数据中获得宝贵的信息进而改进决策。同时&#xff0c;随着时间的推移&#xff0c;数据仓…

【计算机视觉】三、图像处理——实验:图像去模糊和去噪、提取边缘特征

文章目录 0. 实验环境1. 理论基础1.1 滤波器&#xff08;卷积核&#xff09;1.2 PyTorch:卷积操作 2. 图像处理2.1 图像读取2.2 查看通道2.3 图像处理 3. 图像去模糊4. 图像去噪4.1 添加随机噪点4.2 图像去噪 0. 实验环境 本实验使用了PyTorch深度学习框架&#xff0c;相关操作…

企业工商年报注册注销商标注册异常处理小程序开源版开发

企业工商年报注册注销商标注册异常处理小程序开源版开发 1、独立业务模型包括&#xff1a;企业工商年报、企业工商登记注册、企业注销登记、企业异常处理。 2、通用业务模型适合各种业务&#xff0c;比如&#xff1a;商标注册代理、财务会计服务、企业版权登记登。 当然&…

基于nodejs+vue天气数据可视化平台python-flask-django-php

随着社会多元化的不断发展&#xff0c;天气数据问题不可被简单的理解为是科学问题&#xff0c;更多的是环境问题&#xff0c;可以直接影响到人民的日常生活&#xff0c;甚至对一个国家的政治经济带来影响&#xff0c;由此可见&#xff0c;天气预测是一项非常重要的行业。基于此…

C++总结

数据类型 基本的内置类型 修饰符类型 C 允许在 char、int 和 double 数据类型前放置修饰符。 修饰符是用于改变变量类型的行为的关键字&#xff0c;它更能满足各种情境的需求。 类型限定符 函数 以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的&am…

MacOS 电脑如何通过自带terminal终端连接PostgreSQL

1、安装Postgre SQL客户端工具 brew install postgresql 2、连接到PostgreSQL &#xff08;1&#xff09;创建远程连接 psql -h hostname -U username -d database 其中&#xff0c;hostname 是 PostgreSQL 服务器的主机名或 IP 地址&#xff0c;username 是您的 PostgreS…

kubesphere all in one部署Jenkins提示1 Insufficient cpu

原因 devops 至少一个cpu&#xff08;1000m&#xff09;&#xff0c;但是其他资源已经占用了很多cpu CPU 资源以 CPU 单位度量。Kubernetes 中的一个 CPU 等同于&#xff1a; 1 个 AWS vCPU 1 个 GCP核心 1 个 Azure vCore 裸机上具有超线程能力的英特尔处理器上的 1 个超线程…

一款不错的开源的 Linux 服务器运维管理面板:1Panel

适用于非运维人员的环境搭建、部署、监控等 一、1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。1Panel 的功能和优势包括&#xff1a; 快速建站&#xff1a;深度集成 Wordpress 和 Halo&#xff0c;域名绑定、SSL 证书配置等一键搞定&#xff1b; 高效管理&#xf…

【RPG Maker MV 仿新仙剑 战斗场景UI (五)】

RPG Maker MV 仿新仙剑 战斗场景UI 五 战斗状态菜单原始RMMV 菜单窗口仿新仙剑代码仿新仙剑战斗状态菜单 战斗状态菜单 这部分比较简单&#xff0c;由于有主菜单的状态菜单打底所以开发上也容易些。 原始RMMV 菜单窗口 在原版的RMMV中显示的数据主要是人物的HP、MP、TP、和两…

1688货源工厂商品采集如何实现自动化对接?(API免费测试)

随着电子商务的迅猛发展&#xff0c;货源采购已成为企业运营中不可或缺的一环。对于许多商家而言&#xff0c;1688货源工厂是一个重要的采购平台&#xff0c;其丰富的商品种类和价格优势吸引了大量采购者的目光。然而&#xff0c;手动采集商品信息不仅效率低下&#xff0c;而且…

SpringCloudAlibaba Nacos配置及应用

Nacos搭建及配置 nacos本机服务搭建 windows上搭建单机nacos&#xff1a; Releases alibaba/nacos GitHub 下载安装包 下载本地&#xff0c;解压&#xff0c;直接运行&#xff08;保证安装包的绝度路径只有英文字符&#xff0c;有中文会导致运行失败&#xff09;&#xff…

进程切换进程状态

文章目录 前言一、进程切换二、运行状态(R)三、休眠状态(S)四、磁盘休眠状态(D)五、停止状态(T)六、死亡状态(X)和僵尸状态(Z) 前言 人在做一件事情都会有对应的状态是做完了&#xff0c;还是没有开始做或者正在做&#xff0c;而进程也是有自己状态的进程对应状态&#xff1a;…

ReaLTaiizor开源.NET winform控件库学习使用

一、ReaLTaiizor项目介绍 1.1 介绍及地址 基于MIT license开源、免费、美观的.NET WinForm UI控件库&#xff1a;ReaLTaiizor ReaLTaiizor是一个开源免费的.NET WinForms控件库&#xff0c;它提供了广泛的组件和丰富的主题选项&#xff08;用户友好、注重设计&#xff09;&am…

Spring boot2.7整合jetcache方法缓存 处理数据发生变化时同步更新缓存 删除缓存操作

上文 Spring boot2.7整合jetcache方法缓存 我们做了个方法缓存的案例 可以将接口内容缓存起来 是能大大提高效率的 但是 我们接口的数据大多来自数据库 如果我们调用增删查改 它的数据变化了 那缓存的内容就会因为没有及时更新变的不准确 例如 我们这样 我们在上面 定义了 一…

微信小程序外卖跑腿点餐(订餐)系统(uni-app+SpringBoot后端+Vue管理端技术实现)

项目介绍 自从计算机发展开始&#xff0c;计算机软硬件相关技术的发展速度越来越快&#xff0c;在信息化高速发展的今天&#xff0c;计算机应用技术似乎已经应用到了各个领域。 在餐饮行业&#xff0c;除了外卖以外就是到店里就餐&#xff0c;在店里就餐如果需要等待点餐的话…

【图解物联网】第3章 物联网设备

3.1 设备——通向显示世界的接口 3.1.1 为什么要学习设备的相关知识 经过前两章的学习&#xff0c;想必各位读者已经掌握物联网这个词描绘出的世界和用于实现物联网的系统架构了。基于这点&#xff0c;这一章将会为大家介绍在物联网世界中起着核心作用的因素&#xff0c;即设…