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

news2024/11/24 1:48:36

文章目录

  • 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.coloradmin.cn/o/1589082.html

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

相关文章

c++ 指针总结

概述 内存地址 在计算机内存中,每个存储单元都有一个唯一的地址(内存编号)。通俗理解,内存就是房间,地址就是门牌号 指针和指针变量 指针(Pointer)是一种特殊的变量类型,它用于存储内存地址。指针的实质…

libcurl 简单实用

LibCurl是一个开源的免费的多协议数据传输开源库,该框架具备跨平台性,开源免费,并提供了包括HTTP、FTP、SMTP、POP3等协议的功能,使用libcurl可以方便地进行网络数据传输操作,如发送HTTP请求、下载文件、发送电子邮件等…

【Linux】UDP编程【上】{诸多编程接口/小白入门式讲解}

文章目录 0.预备知识0.1套接字0.2TCP/UDP0.3大小端问题 1.socket 常见API1.1socket1.2各个接口1.3int bind();1.3网络头文件四件套1.4bzero1.5recvfrom1.6sendto() 2.UDP编程2.1服务器编程2.2客户端编程2.3运行测试2.3.1本机通信2.3.2popen2.3.3strcasestr2.3.4回顾C11智能指针…

dfs板子

递归实现排列 留着明早省赛之前看 #include<iostream> using namespace std; int arr[10010]; int brr[10010]; int n,k; void dfs(int num){if(num > n){for(int i 1;i < n;i){cout << arr[i] << " ";}cout << endl;return;}for(in…

mysql题目2

tj11: select sex,count(sex) from t_athletes group by sex; tj12: select name 姓名,TIMESTAMPDIFF(year,birthday,2024-1-1) 年龄 from t_athletes tj13: SELECT * FROM t_athletesWHERE id NOT IN (SELECT aid FROM t_match WHERE sid IN (SELECT id FROM t_sport WHE…

python 的join函数

join函数是一个对字符串处理的函数 字符串.join(str)的含义是把字符串加入到str的每一个间隙里面 如 str1234 ,.join(str) #打印的结果为 1,2,3,4

C语言处理文本模板:格式信函编程

开篇 本篇文章的问题来源为《编程珠玑》第3章其中一个问题&#xff0c;格式信函编程。说白了就是先在文件中定义一个文本模版&#xff0c;然后使用数据库中的数据去填充这个模版&#xff0c;最后得到填充后的文本&#xff0c;并输出。 问题概要 在常去的网店键入你的名字和密码…

动态规划先导片

大家知道动规是由前一个状态推导出来的&#xff0c;而贪心是局部直接选最优的&#xff0c;对于刷题来说就够用了。 对于动态规划问题&#xff0c;我将拆解为如下五步曲&#xff0c;这五步都搞清楚了&#xff0c;才能说把动态规划真的掌握了&#xff01; 确定dp数组&#xff0…

SaaS知识库工具是真的方便,各大企业都在用

你可能听说过“SaaS”&#xff0c;但你是否真的知道它是什么以及它是如何工作的&#xff1f;简单来说&#xff0c;SaaS&#xff08;Software as a Service&#xff09;意味着以服务的形式提供软件&#xff0c;这是一种在线订阅并通过互联网使用软件的方式。放心&#xff0c;听起…

STM32的位操作(相当于51单片机的sbit)

经过一段时间的学习&#xff0c;今天发现STM32的单个端口都有一个32位的地址&#xff0c;这样就可以把这个地址给找出来&#xff0c;进行单个位的操作了&#xff0c;这也没有什么好说的&#xff0c;直接复制粘贴就好了&#xff0c;用到的时候过来复制直接使用就行了。虽然看着挺…

书生·浦语大模型实战营之XTuner 微调个人小助手认知

书生浦语大模型实战营之XTuner 微调个人小助手认知 在本节课中讲一步步带领大家体验如何利用 XTuner 完成个人小助手的微调&#xff01; 为了能够让大家更加快速的上手并看到微调前后对比的效果&#xff0c; 用 QLoRA 的方式来微调一个自己的小助手&#xff01; 可以通过下面两…

react项目规范新手教程

简介 React是一种流行的JavaScript库&#xff0c;用于构建用户界面。搭建一个React项目并不难&#xff0c;但确保项目的结构和配置正确可以帮助你更有效地开发和维护应用程序。以下是搭建React项目的一些步骤&#xff1a; 项目规范&#xff1a;项目中有一些开发规范和代码风格…

mybatis05:复杂查询:(多对一,一对多)

mybatis05&#xff1a;复杂查询&#xff1a;&#xff08;多对一&#xff0c;一对多&#xff09; 文章目录 mybatis05&#xff1a;复杂查询&#xff1a;&#xff08;多对一&#xff0c;一对多&#xff09;前言&#xff1a;多对一 &#xff1a; 关联 &#xff1a; 使用associatio…

三子棋+迷宫

又水了一篇&#xff0c;嘿嘿不废话了&#xff0c;正文开始 文章目录 1.三子棋&#xff08;Tic-Tac-Toe&#xff09;游戏流程解析游戏设计游戏代码实现1. 包含头文件和定义全局变量2. 初始化游戏板3. 打印游戏板4. 玩家行动5. 检查胜利条件6. 主函数下面是完整的C语言代码 2.控…

机器学习——概述总结

总图&#xff1a; 分部1&#xff1a; 分部2&#xff1a; 分部3&#xff1a;

计算机基础知识-第7章-程序的本质(2)——算法与数据结构概论

一、算法数据结构程序 提出这一公式并以此作为其一本专著的书名的瑞士计算机科学家尼克劳斯沃思&#xff08;Niklaus Wirth&#xff09;由于发明了多种影响深远的程序设计语言&#xff0c;并提出结构化程序设计这一革命性概念而获得了1984年的图灵奖。他是至今惟一获此殊荣的瑞…

k8s的ca以及相关证书签发流程

k8s的ca以及相关证书签发流程 1. kube-apiserver相关证书说明2. 生成CA凭证1.1. 生成CA私钥1.2. 生成CA证书 2. 生成kube-apiserver凭证2.1. 生成kube-apiserver私钥2.2. 生成kube-apiserver证书请求2.3. 生成kube-apiserver证书 3. 疑问和思考4. 参考文档 对于网站类的应用&am…

C++高级特性:柯里化过程与std::bind(六)

1、柯里化过程 1.1、operator()的引入 现在需要完成这样一个需求&#xff1a;有一个函数每次调用返回的结果不一样。例如&#xff1a;两次调用的返回值都不一样那么就可以达到这种目的 1.1.1、简单点的写法 可以给一个全局的变量&#xff08;静态变量&#xff09;&#xff…

交换机与路由器缓冲区:寻找完美大小

*本文系SDNLAB编译自瞻博网络技术专家兼高级工程总监Sharada Yeluri领英 在路由器和交换机中&#xff0c;缓冲区至关重要&#xff0c;可以防止网络拥塞期间的数据丢失。缓冲区到底要多大&#xff1f;这个问题在学术界和工业界一直备受争议。本文探讨了高端路由器中数据包缓冲的…

书生·浦语大模型全链路开源体系-第3课

书生浦语大模型全链路开源体系-第3课 书生浦语大模型全链路开源体系-第3课相关资源RAG 概述在 InternLM Studio 上部署茴香豆技术助手环境配置配置基础环境下载基础文件下载安装茴香豆 使用茴香豆搭建 RAG 助手修改配置文件 创建知识库运行茴香豆知识助手 在茴香豆 Web 版中创建…