【C++封装】C++面向对象模型

news2024/11/15 7:38:30

文章内容如下:

1)成员变量和函数的存储

2)this指针

3)const修饰成员函数

4)有元

一。成员变量和函数的存储

        C++实现了封装,数据(-变量)和处理数据的操作(-函数)是分开存储的,C++中的非静态数据成员直接内含在类对象中,成员函数虽然内含在class声明之内,去不出现在对象中,每一个非内联成员函数只会诞生一份函数实例

         从上述图中我们会有一个疑问,共享的成员函数是如何区分哪个对象在调用自己的呢?(this指针)

二。this指针

        this指针指向的是被调用的成员函数所属的对象的。this指针是一种隐含指针,他隐含于每个类的非静态成员函数中,this指针无需定义,直接使用即可。    

        这里最对静态成员函数与非静态成员函数做一下总结:静态成员函数类里声明类外定义,因为属于这个类不属于对象,所以没有实例化对象也能使用,并且只能操作静态成员数据,非静态成员函数如果在类外,也是类里声明,类外定义,通过this指针判断是哪个对象在调用它。

2. this指针的应用

        函数形参和成员同名可以使用this指针解决;

        this指针来完成链式操作

三。const修饰成员函数

        const修饰成员函数,其实是指const修饰this指针指向的内存区域,所以该成员函数体内不可以修改本类中的任何普通成员变量,当成员变量类型前用mutable修饰时除外。      

四。有元

        有元可以理解为特权的意思,用friend修饰的变量或函数就叫有元变量或友元函数,他可以用来访问另一个类中的私有数据。类的主要特点之一就是数据隐蔽,即类的私有成员无法在类外访问,但是有时候需要在类外访问类的私有成员,这时候就需要有元来操作,有时候我么会将全局函数做有元,有时候会将某个类中的成员函数做有元,有的会将整个类声明为有元。

        需要注意的是,friend只出现在声明处。有元主要用在运算符重载上。

         需要注意的是有元不能被继承,有元不具有传递性。

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

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

相关文章

SpringBoot Notes

文章目录1 SpringBootWeb快速入门1.1Spring官网1.2 Web分析2. HTTP协议2.1 HTTP介绍34 SpringBootWeb请求响应5 响应6 分层解耦6.1 三层架构6.1.1 三层架构介绍6.1.2 基于三层架构的程序执行流程:6.1.3 代码拆分6.2 分层解耦6.2.1 内聚、耦合6.2.2 解耦思路6.3 IOC&…

[LeetCode周赛复盘] 第 333 场周赛20230219

[LeetCode周赛复盘] 第 333 场周赛20230219 一、本周周赛总结二、 [Easy] 6362. 合并两个二维数组 - 求和法1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6365. 将整数减少到零需要的最少操作数1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6364. 无平方子集计数1. 题目描…

操作系统闲谈08——系统调用、中断、异常

操作系统闲谈08——系统调用、中断、异常 一、系统调用 IDT - GDT - 系统调用表 找到对应系统调用号将系统调用号以及一些现场信息存入寄存器eax中(ebx、ecx、edx存放其他信息),然后触发软中断(x86中,0x80为中断号&…

设计模式 状态机

前言 本文梳理状态机概念,在实操中状态机和状态模式类似,只是被封装起来,可以很方便的实现状态初始化和状态转换。 概念 有限状态机(finite-state machine)又称有限状态自动机(英语:finite-s…

ThreadLocal知识点总结

什么是ThreadLocal?它的作用是什么? ThreadLocal是线程Thread中属性threadLocals的管理者。 ThreadLocal是Java中lang包下的一个类,可以用于在多线程环境中为每个线程维护独立的变量副本。它的作用是让每个线程都拥有自己的数据副本&#xff…

Java面向对象的特性:封装,继承与多态

Java面向对象的特性 在学习Java的过程是必须要知道的Java三大特性:封装、继承、多态。如果要分为四类的话,加上抽象特性。 封装 1.封装概述 是面向对像三大特征之一(封装,继承,多态) 是面向对象编程语言对客…

语音增强学习路线图Roadmap

语音增强算是比较难的研究领域,从入门到精通有很多台阶,本文介绍一些有价值的书籍,值得反复阅读。主要分为基础类和进阶类书籍,大多都是理论和实践相结合的书籍,编程实践是抓手,让知识和基础理论变扎实。基础书籍《信号…

RT-Thread初识学习-01

1. RT-Thread 简介 1.1 RT-Thread 是什么 据不完全统计,世界有成千上万个 RTOS(Real-time operating system,实时操作系统),RT-Thread 就是其中一个优秀的作品。 RT-Thread 内核的第一个版本是熊谱翔先生在 2006 年…

分布式-分布式存储笔记

读写分离 什么时候需要读写分离 互联网大部分业务场景都是读多写少的,读和写的请求对比可能差了不止一个数量级。为了不让数据库的读成为业务瓶颈,同时也为了保证写库的成功率,一般会采用读写分离的技术来保证。 读写分离的实现是把访问的压…

LeetCode-384-打乱数组

1、列表随机 为了能够初始化数组,我们使用nums保存当前的数组,利用orignal保存初始化数组。为了实现等可能随机打乱,考虑到随机数本质上是基于随机数种子的伪随机,我们采用如下的方式实现等可能随机:我们将所有元素压…

MySQL备份恢复(十二)

文章目录1. MySQL数据损坏类型1.1 物理损坏1.2 逻辑损坏2. DBA运维人员备份/恢复职责2.1 设计备份/容灾策略2.1.1 备份策略2.1.2 容灾策略2.2 定期的备份/容灾检查2.3 定期的故障恢复演练2.4 数据损坏时的快速准确恢复2.5 数据迁移工作3. MySQL常用备份工具3.1 逻辑备份方式3.2…

【scl】博图程序的导入和导出

导入或者导出博图文件的方法(也叫移植文件) 目录 前言 ​编辑 ​编辑 前言 本篇文章主要写一下关于博图文件的导入和导出,具体要怎么样才能将写好的程序或者块移植到其他地方,下面我们一起来看! 一、程序块的导入和导…

[软件工程导论(第六版)]第4章 形式化说明技术(课后习题详解)

文章目录1. 举例对比形式化方法和欠形式化方法的优缺点。2. 在什么情况下应该使用形式化说明技术?使用形式化说明技术时应遵守哪些准则?3. 一个浮点二进制数的构成是:一个可选的符号(+或-)&…

Seata分布式事务框架-AT模式与TCC模式介绍

Seata分布式事务框架-AT模式介绍 Seata AT事务方案 Seata 的 AT 模式(Automatic Transaction)是一种无侵入的分布式事务解决方案。下面结合具体业务场景来分析其执行的原理。 业务场景 订单系统 当用户下订单时,执行以下三步流程&#x…

【NLP开发】Python实现聊天机器人(Selenium、七嘴八舌)

🍺NLP开发系列相关文章编写如下🍺:1🎈【NLP开发】Python实现词云图🎈2🎈【NLP开发】Python实现图片文字识别🎈3🎈【NLP开发】Python实现中文、英文分词🎈4🎈【…

XSS注入进阶练习篇(二)DOM型XSS注入深入

DOM型XSS注入深入1. SVG 劫持JS执行1.1 DOM树的概念与构建过程1.1.1 什么是DOM树?1.1.2 DOM树的构建过程1.2 探究img失败的原因1.3 svg标签劫持innerhtml2. details标签 特定条件下劫持JS执行2.1 事件触发流程2.2 实例3.DOM clobbering 绕过3.1 什么是DOM clobberin…

Redis内存回收

Redis 内存回收 Redis之所以性能很强&#xff0c;最主要的原因是基于内存存储&#xff0c;然而单节点的Redis其内存大小不宜过大&#xff0c;会影响持久化或主从同步性能 可以通过修改配置文件来设置Redis的最大内存 maxmemory <bytes>当内存达到上限时&#xff0c;就…

营销狂人杜国楹的两大顶级思维

“营销狂人”小罐茶 杜国楹两大顶级思维 1.一定要有【参照物思维】 2.一定要有【终局思维】 趣讲大白话&#xff1a;大牛的思考就是不同 *********** 杜国楹对茶行业思考 1.参照咖啡、酒的发展路径 2.中国茶工业化,品牌化是唯一壮大之路 3.龙头企业必须全品 没有参照物思维就没…

Python将内容写入文件的方法总结。

使用Python写入文件是我们coder的日常&#xff0c;本篇带你详细看一下python将内容写入文件的方法以及细节。主要包括write()方法、writelines() 方法、print() 函数、使用 csv 模块、使用 json 模块。 目录 一、write()方法 二、writelines() 方法 三、print() 函数 四、使…

【Java】中的各种锁

Java提供了种类丰富的锁&#xff0c;每种锁因其特性的不同&#xff0c;在适当的场景下能够展现出非常高的效率。 一、Java锁是什么&#xff1f;为什么要用Java锁&#xff1f; 在并发编程中&#xff0c;经常遇到多个线程访问同一个共享资源 &#xff0c;这时候作为开发者必须考…