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

类和对象【基础概念】

全文目录

  • 类的定义
    • 定义方式
  • 类的访问限定符
    • 封装(面向对象的三大特性之一)
  • 类对象模型
    • 类对象的存储方式
    • 类对象的大小计算
  • `this`指针
    • `this`指针的特性
    • **`this`指针可以为空吗?**

类的定义

在C++中,C语言中的结构体struct中除了定义变量外还能定义函数,这是C++将结构体升级成了类,同时还引入了定义类的关键字class

struct structName
{// 类体:由成员函数和成员变量组成
}; // 一定要注意后面的分号class className
{// 类体:由成员函数和成员变量组成
}; // 一定要注意后面的分号

类体中内容称为类的成员:类中的变量称为类的属性成员变量; 类中的函数称为类的方法或者成员函数

定义方式

  1. 声明即定义

声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。

在这里插入图片描述

  1. 声明和定义分离

类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员时,需要使用 :: 作用域操作符指明成员属于哪个类域。

在这里插入图片描述

类的访问限定符

C++实现封装的方式: 用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。

访问限定符的种类:

  1. p u b l i c public public (公有)
  2. p r o t e c t e d protected protected (保护)
  3. p r i v a t e private private (私有)

访问限定符的说明:

  1. p u b l i c public public 修饰的成员在类外可以直接被访问
  2. p r o t e c t e d protected protected p r i v a t e private private 修饰的成员在类外不能直接被访问(此处 p r o t e c t e d protected protected p r i v a t e private private 是类似的)
  3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
  4. 如果后面没有访问限定符,作用域就到} 即类结束。
  5. c l a s s class class 的默认访问权限为 p r i v a t e private private s t r u c t struct struct p u b l i c public public (因为 s t r u c t struct struct 要兼容C)

封装(面向对象的三大特性之一)

将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。

在C++语言中实现封装,可以通过访问权限来隐藏对象内部实现细节,控制哪些方法可以在类外部直接被使用。

类对象模型

类定义出来后相当于一个数据类型,用类类型声明的变量叫做对象。

用类类型创建对象的过程,称为类的实例化

类对象的存储方式

对象中只保存成员变量,成员函数存放在公共的代码段

在这里插入图片描述

类对象的大小计算

直接通过计算验证:

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

结论: 一个类的大小,实际就是该类中”成员变量”之和,当然要注意内存对齐。

注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类的对象。

this指针

同一个类可以实例化出多个对象,在同一个成员函数体中没有关于不同对象的区分,那么是如何做到数据的独立性的呢?

C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量”的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

在这里插入图片描述

this指针的特性

  1. this指针的类型:类类型* const,即成员函数中,不能给this指针赋值。
  2. 只能在“成员函数”的内部使用
  3. this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给this形参(所以this指针是存在栈上的)。所以对象中不存储this指针。
  4. this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递

this指针可以为空吗?

// 1.下面程序编译运行结果是? A、编译报错 B、运行崩溃 C、正常运行
class A
{
public:void Print(){cout << "Print()" << endl;}
private:int _a;
};int main()
{A* p = nullptr;p->Print();return 0;
}答案:
正常运行打印Print()
解析:
这是因为成员函数在编译阶段地址就确定好了,这里相当于是正常的调用了一个函数。

再来看一段程序

// 1.下面程序编译运行结果是? A、编译报错 B、运行崩溃 C、正常运行
class A
{
public:void Print(){cout << _a << endl;}
private:int _a;
};int main()
{A* p = nullptr;p->PrintA();return 0;
}答案:运行崩溃
解析:通过this指针访问_a时,发生了空指针的解引用

结论: 当没有通过this指针访问成员变量时,可以为空,但是尽量不要为空。

相关文章:

类和对象【基础概念】

全文目录 类的定义定义方式 类的访问限定符封装&#xff08;面向对象的三大特性之一&#xff09; 类对象模型类对象的存储方式类对象的大小计算 this指针this指针的特性**this指针可以为空吗&#xff1f;** 类的定义 在C中&#xff0c;C语言中的结构体struct中除了定义变量外还…...

如何测试生成式人工智能(AIGC)

简介&#xff1a;在人工智能日趋普及的今天&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;已经成为不可忽视的一个分支。从自动化生成新闻、编写代码到图像和音频生成&#xff0c;AIGC几乎无处不在。但如何确保这些生成的内容达到预期标准、安全可靠&#xff0c;同时…...

机器学习算法详解3:逻辑回归

机器学习算法详解3&#xff1a;逻辑回归 前言 ​ 本系列主要对机器学习上算法的原理进行解读&#xff0c;给大家分享一下我的观点和总结。 本篇前言 ​ 本篇对逻辑回归的算法原理进行解读。 目录结构 文章目录 机器学习算法详解3&#xff1a;逻辑回归1. 引子2. sigmoid函数3. 原…...

linux命令集合

cd:切换文件路径 pwd:显示当前所处的路径 mkdir&#xff1a;创建目录比如mkdir test touch:创建一个空文件touch test.txt in:用于指定文件夹在另一个位置建立同步的链接in -s /lib/test1 /user/lj 在user目录下建立指向/lib/test1 目录的lj文件 cat:cat file(查看文件内…...

实现卓越供应链:RFID技术的革命性应用

在现代制造业中&#xff0c;供应链和物流的高效运作至关重要&#xff0c;它不仅影响着生产效率&#xff0c;还直接关系到企业的竞争力和客户满意度。为了应对这些挑战&#xff0c;越来越多的企业开始关注智能制造RFID智能设备&#xff0c;将其应用于供应链和物流管理&#xff0…...

从JVM角度看继承

从JVM角度看继承 最近重读了周志明老师的《深入理解JAVA虚拟机》一书&#xff0c;看完大有收获&#xff0c;但仍对继承情况下对象内存布局有所疑惑&#xff0c;所以查阅资料&#xff0c;结合本书进行分析 参考文档&#xff1a; 【深入理解JVM】&#xff1a;Java类继承关系中…...

基于Python和mysql开发的看图猜成语微信小程序(源码+数据库+程序配置说明书+程序使用说明书)

一、项目简介 本项目是一套基于Python和mysql开发的看图猜成语微信小程序&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都…...

Unity入门教程||创建项目(上)

一、介绍 目的&#xff1a;通过尝试制作一款使用玩家角色把小球弹飞的简单小游戏&#xff0c;熟悉使用Unity进行游戏开发的基本流程。 软件环境&#xff1a;Unity 2017.3.0f3&#xff0c;Visual Studio 2013 二、创建新项目 1&#xff0c;启动Unity后将出现一个并列显示Pro…...

Openbmc编译

1.网址的问题解决 原文 Modifying /conf/local.conf was the only solution that worked for me. Simply add one of the two options:#check connectivity using google CONNECTIVITY_CHECK_URIS "https://www.google.com/"#skip connectivity checks CONNECTIVI…...

美国CN2服务器速度怎么样

美国服务器以免备案、大带宽、性价比高的优势&#xff0c;多用于企业、电商、外贸、视频等个中大型网站建设。但是&#xff0c;因中美服 务器接口原因&#xff0c;导致某些服务器的网络并不稳定&#xff0c;这时候就会对美国服务器产品失望&#xff0c;解决这种问题的方法就是选…...

K8S原理架构与实战教程

文章目录 一、背景1.1 物理机时代、虚拟机时代、容器化时代1.2 容器编排的需要 二、K8S架构2.2 Worker节点 三、核心概念3.1 Pod3.2 Deployment3.3 Service3.4 Volume3.5 Namespace 四、K8S安装五、kubectl常用命令六、K8S实战6.1 水平扩容6.2 自动装箱6.2.1 节点污点6.2.2 Pod…...

基于C#的图书管理系统数据库设计报告

第一章 问题描述 1.1 图书管理系统简介 本系统利用.NET处理数据库的功能&#xff0c;实现对图书馆信息的管理。主要功能为管理有关读者、出版社、书籍、借阅和管理者的信息等。 本系统的结构分为读者信息管理模块、出版社信息管理模块、书籍信息管理模块、借阅信息管理模块、…...

【Express.js】pm2进程管理

pm2进程管理 本节我们将介绍如何使用 pm2 运行和监管我们的 express 项目 准备工作 一个 express 项目全局安装 pm2 npm install -g pm2pm2使用介绍 启动应用 你可以用纯命令去运行一个node项目&#xff0c;假设原本运行项目使用 node src/index.js可以跑起来一个项目&am…...

Nginx部署前后端分离项目(Linux)

Nginx代理前端页面、后端接口 一、前端打包二、后端打包三、Linux部署Nginx启动、暂停、重启服务器部署文件地址&#xff1a; 一、前端打包 npm run build二、后端打包 通过Maven 使用package打包 三、Linux部署 安装Nginx 安装环境 yum -y install gcc pcre pcre-devel z…...

Docker网络

1 简介 网络原理 下载iproute工具&#xff08;linux&#xff09;ip addr查看地址映射 容器内ip地址会进行映射符号。docker分配的地址。 77: eth0if78: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:…...

第15章_瑞萨MCU零基础入门系列教程之Common I2C总线模块

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…...

《TCP/IP网络编程》阅读笔记--多播与广播

目录 1--多播 2--多播代码实例 3--广播 4--广播代码实例 1--多播 多播方式的数据传输是基于 UDP 完成的&#xff0c;多播数据包的格式与 UDP 数据包相同&#xff1b; 多播与 UDP 的区别&#xff1a;UDP 数据传输以单一目标进行&#xff0c;多播数据同时传递到加入&#xff…...

聚观早报|华为Mate 60 Pro支持面容支付;特斯拉重回底特律车展

【聚观365】9月8日消息 华为Mate 60 Pro已支持面容支付 特斯拉将重回底特律车展 iPhone在美国有1.67亿用户 韩国半导体8月份出口85.6亿美元 比亚迪元PLUS冠军版将于9月15日上市 华为Mate 60 Pro已支持面容支付 毫无预热的华为Mate 60 Pro突然在华为商城首批开售&#xf…...

本地缓存Caffeine的缓存过期淘汰策略

本地缓存是一种将数据存储在应用程序的内存中&#xff0c;以加速数据访问的技术。缓存的数据可以是频繁访问的数据&#xff0c;以减少对慢速数据源&#xff08;如数据库或网络&#xff09;的访问。缓存通常有一些缓存过期淘汰策略&#xff0c;以确保缓存中的数据保持最新和有效…...

激光焊接汽车尼龙塑料配件透光率测试仪

激光塑性成型技术是近年来塑性加工界出现的一种新技术。通常塑料主要是通过加热加压依赖模具成型。这对于单品种、大批量生产是有效的&#xff1b;而对于各种不同形状的塑料制件则需要昂贵的模具‚装置也较庞大。 高度聚焦的激光束垂直照射在待变形的板料上‚由于塑料直接吸收激…...

2023年高校大数据实验室建设方案

大数据实验室建设方案具体内容包括&#xff1a;人才培养方案建设、课程资源建设、师资建设、实验室建设、教学服务建设。 泰迪打造国内领先的大数据人工智能及课程资源&#xff0c;包括&#xff1a;商务数据分析实训管理平台、云计算资源管理平台、大数据编程实训平台、商务数据…...

计网第五章(运输层)(一)

在前面的博客中&#xff0c;总是说主机之间进行通信。但实际上通信的真正的实体是位于通信两端主机中的进程。 一、运输层基本概述 运输层的任务就是为运行在不同主机上的应用进程提供直接的通信服务&#xff0c;运输层的协议又称为端到端协议。运输层中使用不同的端口来对应…...

ILS解析漏洞复现

搭建好ILS后&#xff0c;访问127.0.0.1:8000 写一个phpinfo的脚本 可以看到。现在是不能访问的 赋予 IIS 解析 phpinfo 能力 打开服务器管理器&#xff0c;打开 IIS 管理器 点击处理程序映射 再次访问&#xff0c;发现程序可以访问 将index.php改为index.png 此时php脚本自然是…...

0067__Git学习(1.本地仓库与暂存区)

Git学习&#xff08;1.本地仓库与暂存区&#xff09;_git暂存区_听枫1122的博客-CSDN博客 git的本地仓库在哪里_git本地仓库在哪里_二十英里法则的博客-CSDN博客...

Mac端交互式原型设计 Axure RP 8 for Mac汉化

Axure RP 8是一款专业的交互原型设计工具&#xff0c;它被广泛应用于用户体验设计、界面设计和产品原型制作等领域。该软件提供了丰富的功能和工具&#xff0c;使用户能够创建出具有高度交互性和可视化效果的原型。 Axure RP 8的主要特点和功能包括&#xff1a; 1. 快速原型&a…...

GO语言网络编程(并发编程)Sync

GO语言网络编程&#xff08;并发编程&#xff09;Sync 1、Sync 1.1.1. sync.WaitGroup 在代码中生硬的使用time.Sleep肯定是不合适的&#xff0c;Go语言中可以使用sync.WaitGroup来实现并发任务的同步。 sync.WaitGroup有以下几个方法&#xff1a; 方法名 功能 (wg * WaitG…...

如何在 Ubuntu 上安装 Nagios?

Nagios 的功能 Nagios 的一些关键功能包括&#xff1a; 主机和服务监控&#xff1a; Nagios 允许您使用提供实时状态数据的插件来监控主机&#xff08;可以是物理机或虚拟机&#xff09;以及 HTTP、SSH 和 SMTP 等服务。此功能使您能够全面了解整个基础设施的运行状况和可用性…...

汽车技术发展趋势及我国节能与新能源汽车技术

一、世界汽车技术发展趋势 汽车技术正向着低碳化、信息化、智能化方向发展&#xff1b;“三化”趋势成为世界主要汽车强国、主要车企共同的战略选择。 主要汽车战略及方向 在“三化”趋势下&#xff0c;各汽车强国在汽车节能技术、新能源汽车技术、智能网联汽车技术等方面持续…...

如何实现负载均衡

在如今互联网应用日益火热的背景下&#xff0c;为了保证应用程序的高可用性和高性能&#xff0c;负载均衡变得越来越重要。负载均衡是指将传入的请求分配到多个服务器上&#xff0c;以避免单一服务器的过载&#xff0c;提高系统的可用性和性能。而PHP作为一种广泛使用的服务器端…...

Jetsonnano B01 笔记3:GPIO上拉下拉-输入输出读取

今日继续我的jetsonnano学习之路&#xff0c;今日学习的是GPIO的上拉下拉&#xff0c;输入输出的读取&#xff0c;文章贴出完整操作步骤过程&#xff0c;贴出源码。 目录 Linux常用文件命令&#xff1a; ls&#xff08;list&#xff09;列表&#xff1a; man&#xff1a; …...

东阳科技网站建设/网络营销和市场营销的区别

通过昨天晚上的研究&#xff0c;让我对group by等函数感到很多的不解。对于其的用法感到很困惑。学而不思则罔&#xff0c;思而不学则殆。动手研究&#xff0c;今天先进行一点。 SQL> select * from emp 2 ; EMPNO ENAME JOB MGR HIREDATE SAL …...

wordpress com/王通seo赚钱培训

K 班前7次作业成绩汇总 得分榜 千帆竞发 详细 短学号名1234567TOTAL505基智4.551-200-104.37-2.08414圳源5.432.281.675-1054.0113.39125文智111.670057.8916.56204斌豪3.182.2825.246.11-107.9516.76608一飞4.75126.966.67-107.9519.33126松雄4.753.8315.758.56-108.7422.6352…...

什么是移动网站开发/做推广网络

前言 更换ip地址麻烦 所以做个脚本吧 操作界面 脚本内容 #!/bin/bash # ****************************************************** # 作用&#xff1a;根据主机目前IP地址更换为静态IP&#xff0c;或者手动输入IP地址用于跟换(手动更换要提供网卡名哦)。 # 时间&#xff1a;2…...

微商网站制作/搜索推广开户

增量填充 &#xff1a; 只调整自上次填充后添加、删除或修改的行的索引项 完全填充&#xff1a; 如果为全文目录请求完全填充&#xff0c;则为该目录所涉及的所有表中的所有行生成索引项。如果为表请求完全填充&#xff0c;则为该表中的所有行生成索引项。完全填充通常发生在当…...

西安网站建设 企业建站/郑州百度seo关键词

STM32基于STM32CubeMX硬件I2C驱动MPU6050读取数据✨申明&#xff1a;本文章仅发表在CSDN网站&#xff0c;任何其他网站&#xff0c;未注明来源&#xff0c;见此内容均为盗链爬取&#xff0c;请多多尊重和支持原创!&#x1f341;对于文中所提供的相关资源链接将作不定期更换。&a…...

网站建设与规划方案书/站长平台工具

2015年3月28日&#xff0c;在人来人往的北京中关村创业大街上的极客咖啡&#xff0c;近百位过去8年和InfoQ中国一同成长的朋友齐聚一堂&#xff0c;共同庆祝InfoQ中国&#xff08;微信号&#xff1a;infoqchina&#xff09;的八周年生日。\u0026#xD;\u0026#xD;时间回到2006年&a…...