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

文章目录

  • 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修饰的成员变量之后会讲

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

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

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

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

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

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


类的大小

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

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

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


在这里插入图片描述

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

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

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

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

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

相关文章

Day38: 动态规划 LeedCode:509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 蓝桥杯: 更小的数

对于动态规划问题,拆解为如下五步曲 确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化(容易数组溢出)确定遍历顺序举例推导dp数组 509. 斐波那契数 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐…

事务,MySQL函数和索引详解

文章目录 事务简介提交方式手动提交事务 事务执行流程修改事务的默认提交方式 事务原理四大特性隔离级别 MySQL函数常见的日期函数判断函数case when字符串函数数字函数 MySQL性能(了解)索引概念分类MySQL索引语法数据结构(了解)BTreeBTree好处 优缺点优势劣势 创建原则 事务简…

Golang 并发安全Map容器实践

Golang原生Map容器并非支持并发安全,在实际使用的时候很容易导致条件竞争并造成未知问题,本文介绍了在Golang中如何安全的并发访问Map容器。原文: Concurrent-Safe Map Container in Go Georg Bommeli Unsplash 当多个程序同时尝试写入同一个map时&#…

swiftUI macOS使用webview加载外部网址

import SwiftUI import WebKitstruct ContentView: View {var body: some View {VStack {Text("测试")WebView(urlString: "https://aweb123.com").frame(maxWidth: .infinity, maxHeight: .infinity) // 让 WebView 占据整个可用空间}.frame(minWidth: 20…

给Parallels Desktop虚拟机下的Linux磁盘扩容

本文是以Ubuntu为例演示,涉及到的命令在centos里也同样适用 一、扩容前查看磁盘容量 二、开始扩容操作 第一步:打开PD分配更大的磁盘空间,要保证有足够大的扩容空间 我的pd里给ubuntu分配了64G的磁盘空间,所以我大概还能扩容34G…

VMware 安装配置 Ubuntu(最新版、超详细)

1. 下载安装 VMware ➡️➡️➡️来源:VMware Docs VMware Workstation Pro™ 使专业技术人员能够在同一台 PC 上同时运行多个基于 x86 的 Windows、Linux 和其他操作系统,从而开发、测试、演示和部署软件。 [Step 1]: 点击 VMware Workstati…

loopback和物理接口通信实现远程控制设备

实验流程:设置物理接口的ip 设置loopback的虚拟接口地址 设置远程链接telnet的用户信息和权限 最后需要增加访问到loopback的路由表信息,否则无法通信,多数人这里没设置,导致访问不了loopback地址 路由器的e口不可以直接设置i…

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

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

docker-compose yaml指定具体容器网桥ip网段subnet

docker-compose 启动yaml有时可能的容器网段与宿主机的ip冲突导致宿主机上不了网,这时候可以更改yaml指定subnet 宿主机内网一般是192**,这时候容器可以指定172* version: 3.9 services:coredns:image: coredns/coredns:1.10.0container_name: coredns…

《疯狂java讲义》Java AWT图形化编程中文显示

《疯狂java讲义》第六版第十一章AWT中文没有办法显示问题解决 VM Options设置为-Dfile.encodinggbk 需要增加变量 或者这边直接设置gbk 此外如果用swing 就不会产生这个问题了。

动态规划|746.使用最小花费爬楼梯

力扣题目链接 class Solution { public:int minCostClimbingStairs(vector<int>& cost) {vector<int> dp(cost.size() 1);dp[0] 0; // 默认第一步都是不花费体力的dp[1] 0;for (int i 2; i < cost.size(); i) {dp[i] min(dp[i - 1] cost[i - 1], dp[…

【面试必备】MySQL索引是什么?怎么设计索引?

在后端面试中&#xff0c;MySQL的索引是一个常见问题&#xff0c;尤其是最近掀起了去Oracle的风向。作为一个很宽泛的面试题&#xff0c;不仅考验对MySQL整体知识的了解&#xff0c;也方便面试官随着我们的回答逐渐往下延伸问题。众所周知&#xff0c;面试问题的答案&#xff0…

【2024年MathorCup数模竞赛】C题赛题与解题思路

2024年MathorCup数模竞赛C题 题目 物流网络分拣中心货量预测及人员排班背景求解问题 解题思路问题一问题二问题三问题四 本次竞赛的C题是对物流网络分拣中心的货量预测及人员排班问题进行规划。整个问题可以分为两个部分&#xff0c;一是对时间序列进行预测&#xff0c;二是对人…

C++list模拟实现

Clist模拟实现 list接口总结结点类的模拟实现迭代器的模拟实现迭代器模板参数迭代器类中的构造函数迭代器类中的运算符重载operator和operator - -operator&#xff01; 和operatoroperator*operator->总览 list 类构造函数拷贝构造函数赋值运算符重载operatorclear&#xf…

高精度定时器中 single-shot 计数模式不工作

1. 问题提出 客户使用 STM32G474 的高精度定时器&#xff0c;基于 CubeMX 进行外设配置与代码生成&#xff0c;将某个子定时器的计数方式设置为 retriggerable single shot 方式&#xff0c;发现该子定时器无 PWM 输出&#xff0c;在调试模式下发现该子定时器的计数器一直为 0…

2024MathorCup(妈妈杯) C题完整思路+数据集+完整代码+高质量成品论文

C题物流网络分中心货量预测及人员排班 &#xff08;完整的资料数据集代码在文末&#xff09; 电商物流网络在订单履约中由多个环节组成&#xff0c;其中&#xff0c;分拣中心作为网络的中 间环节&#xff0c;需要将包裹按照不同流向进行分拣并发往下一个场地&#xff0c;最终使…

「每日跟读」英语常用句型公式 第10篇

「每日跟读」英语常用句型公式 第10篇 1. It goes without saying that __ 毋庸置疑的是 ______ It goes without saying that hard work pays off(毋庸置疑的是&#xff0c;努力工作会有回报) It goes without saying that health is the most important wealth(毋庸置疑的…

C++第十五弹---string基本介绍(一)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、什么是STL 2、STL的版本 3、STL的六大组件 4、STL的重要性 5、如何学习STL 6、STL的缺陷 7、为什么学习string类 7.1、C语言中的字符串…

节省30%成本,宝马使用 NVIDIA Omniverse 构造的数字孪生虚拟汽车工厂,实现降本增效

在数字化转型过程中&#xff0c;汽车制造商宝马集团将工业 AI 的力量运用到整个生产网络&#xff0c;与NVIDIA Omniverse平台共同构建并运行工业元宇宙应用。 宝马集团董事Milan Nedeljković在GTC主题演讲会中&#xff0c;与NVIDIA创始人兼首席执行官黄仁勋共同展示了Omniver…

YOLOv8打印模型结构配置信息并查看网络模型详细参数:参数量、计算量(GFLOPS)

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…