类和对象【一】类和对象简介

文章目录

  • C++的类与C语言结构体的区别【引入类】
  • 类的定义
    • 类体中的成员函数的实现
    • 类中的访问限定符
    • C++中class和struct的区别
  • 类的作用域
  • 类的实例化
    • 类中成员的存储位置
    • 类的大小

C++的类与C语言结构体的区别【引入类】

  1. 类里面不仅可以定义变量还可以定义函数

    在这里插入图片描述

  2. 类具有封装性【将在该文章之后讲解】

  3. 类有构造函数,析构函数,this指针等特殊函数和语法【内容过多将在之后的文章中逐一讲解】


类的定义

class ClassName
{类体};  记得加分号
  • class是类的关键字

  • ClassName是自定义的类名

  • 类体所处的作用域是一个新的作用域,即类域每一个类都有自己的类域


在这里插入图片描述

类体中的成员函数的实现

有两种方式:

  1. 在类体里直接实现

    在这里插入图片描述
    注意:
    直接在类里实现,会向编译器传递内联函数的建议
    如果它函数体很小,编译器就可能会把它作为内联函数

  2. 在类内声明,类外实现

    在这里插入图片描述
    此时要在类外实现的函数的函数名前加::

因为类的{}中圈定了一个作用域【类域】

如果在类外实现它的成员函数不用类名+::限定的话,那个函数就是普通的全局函数
而不是类的类域中的成员函数


类中的访问限定符

一共3个

  1. public【公有的】
    public修饰的成员【包括数据成员和成员函数】在类外可以直接被访问
    在这里插入图片描述

  2. private【私有的】
    private 修饰的成员【包括数据成员和成员函数】在类外不可以直接被访问,只能在类体中/类的成员函数的函数体中直接访问【所以私有成员一般借助于公有的成员函数操作
    在这里插入图片描述

  3. protected【被保护的】
    protected修饰的成员【包括数据成员和成员函数】在类外也不可以直接被访问
    private修饰的成员一般是用于继承给子类的

注意点:

  • 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
    如果后面没有访问限定符,作用域就到 } 即类结束。

  • class定义的类的默认访问权限为privatestruct定义的类默认访问权限为public
    (因为struct要兼容C的结构体,而C的结构体中的成员就是结构体外都可以访问)


C++中class和struct的区别

C++需要兼容C语言,所以C++中struct可以定义结构体

另外C++中struct还可以用来定义类。
struct定义的类class定义类是很相似,区别是struct定义的类默认访问权限publicclass定义的类默认访问权限private
在这里插入图片描述

在这里插入图片描述


类的作用域

类定义了一个新的作用域【类域】,每一个类的作用域都不同
通过不同的类的类名+::区分类外实现成员函数属于哪一个类

在这里插入图片描述

通过不同的类实例化的对象区分调用的是哪一个类中的成员


在这里插入图片描述


类的实例化

类在还没有实例化出对象之前,它只是限定了实例化后对象的大小它的成员名字和类型
没有实例化出对象之前是不占内存的,只是声明

一个类可以实例化出多个对象实例化出的对象才占用内存,存储成员数据


类中成员的存储位置

成员变量:存放在实例化出的对象中不包括static修饰的成员变量,static修饰的成员变量之后会讲

每一个实例化出的对象都为自己的成员变量开辟了空间,用于存放属于自己的数据

成员函数:存放在公共的代码区

一个类中的成员函数被它任意一个实例化出的对象访问时访问到的函数体都是相同的,所以没有必要再每一个对象中存储成员函数的函数体

又因为类中的成语函数是属于它的类域的
所以其他的地方访问不了类的成员函数,只有类实例化出的对象可以访问到成语函数,所以没有必要再每一个对象中存储成员函数的地址

又因为类只是声明,没有开空间,所以类中存不了成员函数的地址/函数体

所以把类的成员函数存放在了普通函数存放的公共代码区


类的大小

类的大小就是类实例化出的对象的大小

根据类中成员的存储位置可知,类实例化出的对象中只存储了成员变量

所以 所有成员变量根据内存对齐后的总大小就是对象的大小


在这里插入图片描述

特别的:空类的大小也是一个字节

在这里插入图片描述
那一个字节不存储有效数据,那一个字节只表示这个类被定义了

编译器给了空类一个字节来唯一标识这个类的对象。

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

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

相关文章

abap 字符超过255的显示

大家都知道SAP ALV的一个单元格最大显示的长度就是255 意思就是你的这个字段在内表里面即使是超过255位,也无法只能显示255 如果客户的需求是需要看到完整的消息内容, 最简单的就是将整个程序的数据右键导出到excle中去查看 如果客户执意需要在ALV中…

python+django教师业绩考评考核评分系统flask

在设计过程中,将参照一下国内外的一些同类网站,借鉴下他们的一些布局框架,将课题要求的基本功能合理地组织起来,形成友好、高效的交互过程。开发的具体步骤为:   第一步,进行系统的可行性分析&#xff0c…

佛山市人工智能产业生态交流会:实在智能Agent引领“智造浪潮”

制造业,实体经济的核心,技术创新的先锋,供给侧结构性改革的关键。在新一轮产业竞争中,数字化转型成为制造业升级的必由之路,是引领未来的重要抓手。 为促进数字经济赋能实体经济,加快人工智能技术的推广应用…

汇编入门--基础知识(1)

1.汇编语言的概念 汇编语言是一种低级编程语言,它与计算机的机器语言非常接近,但比机器语言更易于人类阅读和理解。汇编语言是用一系列的助记符来表示机器语言的操作码和操作数。每种计算机体系结构(如x86、ARM等)都有自己的汇编语…

CCD机器视觉在工业生产中起到什么作用?

CCD机器视觉尺寸测量是基于相对测量方法,通过可追溯性、放大校准、自动边缘提升和屏幕图像测量来计算实际尺寸。在精密测量中,放大倍数必须达到35倍或更高,才能达到微米级的精度。此时,视线宽度小于5mm。对于大于5mm的物体&#x…

小型时间继电器ST3PA-C DC24V 带插座PF085A 导轨安装 JOSEF约瑟

ST3P系列时间继电器 系列型号 ST3PF-2Z(JSZ3F-2Z) 5s AC110V ST3PF(JSZ3F) 10s AC48V ST3PC-1(AH3-3) 5s DC24V ST3PC-1(AH3-3) 2h AC220V ST3PC-F(JSZ3C-F) AC380V ST3PA-E(JSZ3A-E) DC24V ST3PA-F(JSZ3A-F) DC24V ST3PF(JSZ3F) 10s AC36V ST3PC-1(AH3-3) 10s AC24V ST3PC-1…

Linux使用C语言实现Socket编程

Socket编程 这一个课程的笔记 相关文章 协议 Socket编程 高并发服务器实现 线程池 网络套接字 socket: (电源)插座(电器上的)插口,插孔,管座 在通信过程中, 套接字是成对存在的, 一个客户端的套接字, 一个…

【算法】求{1,2,3}序列的全排列,邻里交换法(Java)

【算法】求{1,2,3}序列的全排列,邻里交换法(Java) 代码如下: public class Main{static int count;static int a[] {1,2,3};public static void main(String[] args) {f(a,0);System.out.println(count);}p…

MAC苹果电脑如何使用Homebrew安装iperf3

一、打开mac终端 找到这个终端打开 二、终端输入安装Homebrew命令 Homebrew官网地址:https://brew.sh/ 复制这个命令粘贴到mac的终端窗口,然后按回车键 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/in…

未来汽车硬件安全的需求(1)

目录 1.概述 2.EVITA 2.1 EVITA HSM 2.2 EVITA保护范围 3.市场变化对车载网络安全的影响 3.1 非侵入式攻击的风险 3.2 量子计算机的蛮力攻击 3.3 整车E/E架构的变化 3.4 网络安全标准和认证 3.5 汽车工业的网络安全措施 4.汽车安全控制器 4.1 TPM2.0 4.2 安全控…

数据分析案例(一):地区收入的PCA主成分分析

练习1 地区收入的PCA主成分分析 0.变量说明 1.导包操作 核心思路:导入基础数据操作库包,PCA、k-means 库包,数据可视化库包 import pandas as pd import numpy as np from sklearn.decomposition import PCA from sklearn.preprocessing i…

Go语言中channel和互斥锁的应用场景

面对一个并发问题,我们的解决方案是使用channel还是互斥锁来实现并不总是很清晰。因为Go提倡使用通信来共享内存,所以一个常见的错误就是总是强制使用channel,不管实际情况如何。但是我们应该把这两种选择作为互补手段。 首先,简单回顾一下Go语言中的channel:channel是一种交…

软件设计师-基础知识科目-算法设计与分析8

八、算法设计与分析: 常见算法: 回溯方法: 用深度优先的探索问题的解空间。应用场景:N皇后问题。(背) 分支界限法: 用广度优先的探索问题的解空间,采用的是分支界限法算法设计策…

小程序开发SSL证书下载和安装

在开发小程序时,确保数据的安全传输至关重要,而实现这一目标的关键在于正确获取与安装SSL证书。以下详细介绍了从获取到安装SSL证书的完整流程,以助您为小程序构建可靠的加密通信环境。 一、小程序SSL证书类型选择: 域名验证型D…

互联网轻量级框架整合之设计模式

反射技术 Java的反射技术能够通过配置类的全限定名、方法和参数完成对象的初始化,甚至反射某些方法,大大的增强了Java的可配置型,这也是Spring IoC的底层原理,Java的反射技术覆盖面很广,包括对象构建、反射方法、注解、…

备战蓝桥杯---刷杂题2

显然我们直接看前一半&#xff0c;然后我们按照斜行看&#xff0c;我们发现斜行是递增的&#xff0c;而同一行从左向右也是递增的&#xff0c;因此我们可以直接二分&#xff0c;同时我们发现对称轴的数为Ck,2k. 我们从16斜行枚举即可 #include<bits/stdc.h> using name…

YOLOV5训练KITTI数据集实践

目录 一、YOLOV5下载安装二、KITTI数据集三、标签格式转换四、修改配置文件五、训练六、测试 一、YOLOV5下载安装 git clone https://github.com/ultralytics/yolov5.git conda create -n yolov5 python3.8 -y conda activate yolov5 cd yolov5 pip install -r requirements.t…

一文了解ERC404协议

一、ERC404基础讲解 1、什么是ERC404协议 ERC404协议是一种实验性的、混合的ERC20/ERC721实现的&#xff0c;具有原生流动性和碎片化的协议。即该协议可让NFT像代币一样进行拆分交易。是一个图币的互换协议。具有原生流动性和碎片化的协议。 这意味着通过 ERC404 协议&#xf…

gitlab、jenkins安装及使用文档一

gitlab-jenkins安装文档 IP地址操作系统服务版本192.168.75.137Rocky9.2jenkins 2.450-1.1 jdk 11.0.22 git 2.39.3192.168.75.138Rocky9.2gitlab-ce 16.10.0 gitlab安装 前期准备: 关闭防火墙及 SELinuxsystemctl disable --now firewalld sed -i s/^SELINUXenforcing$…

谷歌seo自然搜索排名怎么提升快?

要想在谷歌上排名快速上升&#xff0c;关键在于运用GPC爬虫池跟高低搭配的外链组合 首先你要做的&#xff0c;就是让谷歌的蜘蛛频繁来你的网站&#xff0c;网站需要被谷歌蜘蛛频繁抓取和索引&#xff0c;那这时候GPC爬虫池就能派上用场了&#xff0c;GPC爬虫池能够帮你大幅度提…