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

C++对象模型和this指针

成员变量和成员函数分开存储:

基本概念:

在C++中,类内的成员变量和成员函数分开存储
只有非静态成员变量才属于类的对象上

每个空对象都会有一个独一无二的内存地址,所以,空对象占用内存空间的大小为1

代码实现:

#include <iostream>
using namespace std;//成员变量和成员函数 分开存储
class Person
{int m_A;//非静态成员变量,属于类的对象上static int m_B;//静态成员变量,不属于类对象上void func()//非静态成员函数,不属于类对象上{;}static void func2()//静态成员函数,不属于类对象上{;}
};
int Person::m_B = 0;
void test01()
{Person p;//空对象 占用内存空间为 : 1     //C++ 编译器会给每个空对象也分配一个字节的空间, 是为了区别空对象占内存的位置cout << "size of p = " << sizeof(p) << endl;
}
void test02()
{Person p;cout << "size of p = " << sizeof(p) << endl;
}
int main()
{test01();test02();system("pause");return 0;
}

this 指针概念:

我们知道在C++中成员变量和成员函数是分开存储的
每一个非静态成员函数只会诞生一份函数实例,也就是说每个同类型的对象会共用一块代码


C++通过提供特殊的对象指针,this指针,this指针指向被调用的成员函数所属的对象

this指针是隐含每一个非静态成员函数内的一种指针
this指针不需要定义,直接使用即可

this指针的用途:
在形参和成员变量同名时,可用this指针来区分
在类的非静态成员函数中,返回对象本身,可使用return *this

代码:

#include <iostream>
using namespace std;
class Person
{
public:Person(int age){//this指针指向 被调用的成员函数 所属的对象this->age = age;}Person& PersonAddAge(Person &p){this->age += p.age;//this指向p2的指针,而*this指向的就是p2这个对象本体return *this;}int age;};
//1.解决名称冲突
void test01()
{Person p1(18);cout << "p1的年龄为:" << p1.age << endl;
} 
//2.返回对象本身用*this
void test02()
{Person p1(10);Person p2(10);p2.PersonAddAge(p1);cout << "p2的年龄:" << p2.age << endl;//链式编程思想 p2.PersonAddAge(p1).PersonAddAge(p1).PersonAddAge(p1);cout << "p2的年龄:" << p2.age << endl;
}int main()
{test01();test02();system("pause");return 0;
}

空指针访问成员函数:

C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针

如果用到this指针,需要加以判断保证代码的健壮性

代码:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
//空指针调用成员函数class Person
{
public:void showClassName(){cout << "this is Person class " << endl;}void showPersonAge(){//报错的原因是因为传入的指针为NULLif (this == NULL){return;}cout << "age =" <<this->m_Age << endl;}int m_Age;
};
void test01()
{Person* p = NULL;p->showClassName();p->showPersonAge();}int main()
{test01();system("pause");return 0;
}

const修饰成员函数:

常函数:
●成员函数后加const后我们称为这个函数为常函数
●常函数内不可以修改成员属性
●成员属性声明时加关键字mutable后,在常函数中依然可以修改
常对象:
●声明对象前加const称该对象为常对象
●常对象只能调用常函数

代码:

#include <iostream>
using namespace std;//常函数
class Person
{
public://this指针的本质 是指针常量  指针的指向是不可以修改的//const Person * const this//在成员函数后面加上const,修饰的是this的指向,让指针指向的值也不可以修改void showPerson() const {this->m_B = 100;//this = NULL;//this指针是不可以修改指针的指向的}void func(){}int m_A;mutable int m_B;//特殊变量,即使在常函数中,也可以修改这个值,加上关键字mutable,这个const的指向可以修改};void test01()
{Person p;p.showPerson();
}
//常对象void test02()
{const Person p;//在对象前加const,变为常对象//p.m_A = 100;//修改不了p.m_B = 100;//m_B是特殊值,在常对象下也可以修改//常对象只能调用常函数!!!//p.func();//无法调用,因为这个函数不是常函数//常对象 不可以调用普通成员函数,因为普通成员函数可以修改属性
}
int main()
{test01();test02();system("pause");return 0;
}

相关文章:

C++对象模型和this指针

成员变量和成员函数分开存储&#xff1a;基本概念&#xff1a;在C中&#xff0c;类内的成员变量和成员函数分开存储只有非静态成员变量才属于类的对象上每个空对象都会有一个独一无二的内存地址&#xff0c;所以&#xff0c;空对象占用内存空间的大小为1代码实现&#xff1a;#i…...

kubernetes教程 --Pod调度

Pod调度 在默认情况下&#xff0c;一个Pod在哪个Node节点上运行&#xff0c;是由Scheduler组件采用相应的算法计算出来的&#xff0c;这个过程是不受人工控制的。但是在实际使用中&#xff0c;这并不满足的需求&#xff0c;因为很多情况下&#xff0c;我们想控制某些Pod到达某…...

功率放大器科普知识(晶体管功率放大器的注意事项)

虽然功率放大器是电子实验室的常用仪器&#xff0c;但是很多人对于它却没有清晰的认识&#xff0c;下面就让安泰电子来为大家介绍功率放大器的科普内容以及使用注意事项&#xff0c;希望大家可以对功率放大器有清晰的认识。功率放大器可以把输入信号的功率放大&#xff0c;以满…...

CentOS 7转化系统为阿里龙蜥Anolis OS 7

转载&#xff1a;原社区CentOS 7迁移Anolis OS 7迁移手册 一、注意事项 Anolis OS 7生态上和依赖管理上保持跟CentOS7.x兼容&#xff0c;一键式迁移脚本centos2anolis.py&#xff0c;实现CentOS7.x到Anolis OS 7的平滑迁移。 使用迁移脚本前需要注意如下事项&#xff1a; 迁…...

【快速复习】一文看懂 Mysql 核心存储 隔离级别 锁 MVCC 机制

一文看懂 Mysql 核心存储 & 隔离级别 & 锁 & MVCC 机制 Mysql InnoDB 引擎下核心存储 数据&索引存储 IBD 文件 mysql 实际存储采用 B 树结构。 B 树是一种多路搜索树&#xff0c;其搜索性能高于 B 树 所有叶节点在同一深度&#xff0c;保证搜索效率仅叶节…...

面试题----集合

概述 从上图可以看出&#xff0c;在Java 中除了以 Map 结尾的类之外&#xff0c; 其他类都实现了 Collection 接⼝。 并且&#xff0c;以 Map 结尾的类都实现了 Map 接⼝List,Set,Map List (对付顺序的好帮⼿)&#xff1a; 存储的元素是有序的、可重复的。 Set (注重独⼀⽆⼆…...

XSS注入基础入门篇

XSS注入基础入门篇1.XSS基础概念2. XSS的分类以及示例2.1 反射型XSS2.1.1 示例1&#xff1a;dvwa low 级别的反射型XSS2.1.2 攻击流程2.2 DOM型XSS2.2.1 示例2&#xff1a;DOM型XSS注入1.环境部署2.基础版本3.进阶绕过2.3 存储型XSS2.3.1 示例1&#xff1a;dvwa low示例2.3.2 攻…...

刷题 - 数据结构(二)链表

1. 链表 1.1 题目&#xff1a;合并两个有序链表 链表的建立与插入&#xff1a;关键在于留出头部&#xff0c;创建迭代指针。 ListNode* head new ListNode; // 通过new 创建了一个数据类型为ListNode的数据 并把该数据的地址赋值给ListNodeListNode* p 0; // 再创建一个数据…...

用于隔离PWM的光耦合器选择和使用

光耦合器&#xff08;或光隔离器&#xff09;是一种将电路电隔离的器件&#xff0c;不仅在隔离方面非常出色&#xff0c;而且允许您连接到具有不同接地层或在不同电压电平下工作的电路。光耦合器具有“故障安全”功能&#xff0c;因为如果受到高于最大额定值的电压&#xff0c;…...

面试完阿里,字节,腾讯的测试岗,复盘以及面试总结

前段时间由于某些原因辞职了&#xff0c;最近一直在面试。面试这段时间&#xff0c;经历过不同业务类型的公司&#xff08;电商、酒店出行、金融、新能源、银行&#xff09;&#xff0c;也遇到了很多不同类型的面试官。 参加完三家大厂的面试聊聊我对面试的一些看法&#xff0…...

分享一个外贸客户案例

春节期间一个外贸人收到了客户的回复&#xff0c;但因为自己的处理方式造成了一个又一个问题&#xff0c;我们可以从中学到一些技巧和知识。“上次意大利的客人询价后&#xff0c;一直没回复&#xff08;中间有打过电话&#xff0c;对方说口语不行&#xff0c;我写过邮件跟进过…...

【Kubernetes】第二篇 - 购买阿里云 ECS 实例

一&#xff0c;前言 上一篇&#xff0c;简单介绍了 CI/CD 的概念以及 ECS 服务规划&#xff0c;搭建整套服务需要三台服务器&#xff0c;配置如下&#xff1a; ECS 配置启动服务说明2核4GJenkins Nexus Dockerci-server2核4GDocker Kubernetesk8s-master1核1GDocker Kube…...

数影周报:据传国内45亿条快递数据泄露,聆心智能完成Pre-A轮融资

本周看点&#xff1a;据传国内45亿条快递数据泄露&#xff1b;消息称微软解雇150 名云服务销售&#xff1b;消息称TikTok计划在欧洲再开两个数据中心&#xff1b;衣服长时间放购物车被淘宝客服嘲讽&#xff1b;聆心智能完成Pre-A轮融资......数据安全那些事据传国内45亿条快递数…...

Leetcode力扣秋招刷题路-0073

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 73. 矩阵置零 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;mat…...

遥感数字图像处理

遥感数字图像处理 来源&#xff1a;慕课北京师范大学朱文泉老师的课程 遥感应用&#xff1a;遥感制图、信息提取 短期内了解知识结构–>有选择的剖析经典算法原理–>系统化知识结构、并尝试实践应用 跳出算法&#xff08;尤其是数学公式&#xff09; 关注原理及解决问…...

深度学习常用的python函数(一)

由于我只简单的学过python和pytorch&#xff0c;其中有很多函数的操作都还是一知半解的&#xff0c;其中有些函数经常见到&#xff0c;所以就打算记录下来。 1.zip zip(*a):针对单个可迭代对象压缩成n个元组&#xff0c;元组数量n等于min(a中元素的最小长度) a [(1, 2), (3…...

2023年美国大学生数学建模A题:受干旱影响的植物群落建模详解+模型代码(一)

目录 前言 一、题目理解 背景 解析&#xff1a; 要求 二、建模 1.相关性分析 2.相关特征权重 只希望各位以后遇到建模比赛可以艾特认识一下我&#xff0c;我可以提供免费的思路和部分源码&#xff0c;以后的数模比赛只要我还有时间肯定会第一时间写出免费开源思路&…...

PPS文件如何转换成PPT?附两种方法

在工作中&#xff0c;PPS文件的使用还是很广泛的&#xff0c;因为作为幻灯片放映文件&#xff0c;点击后就能直接播放&#xff0c;十分方便。但如果想要修改PPS里的内容&#xff0c;PPS是无法编辑的&#xff0c;我们需要把文件转换成PPT&#xff0c;再进行修改。 那PPS文件如何…...

ParallelsDesktop安装【亲测可行】

我这边安装的是macos最新系统 (Ventura13.2) 本文参考这篇文章安装&#xff0c;但是你完全按照这篇文章会报错&#xff0c;具体可行操作记录如下 一、下载软件和补丁 1、点这里去下载补丁18.0.1 2、点这里去下载对应版本的ParallelsDesktop18.0.1&#xff0c;安装上到试用这里…...

在 Python 中只接受数字作为用户输入

只接受数字作为用户输入&#xff1a; 使用 while True 循环进行循环&#xff0c;直到用户输入一个数字。使用 float() 类尝试将值转换为浮点数。如果用户输入了一个数字&#xff0c;请使用 break 语句跳出循环。 while True:try:# &#x1f447;️ use int() instead of floa…...

【集合】JAVA基础篇(二)

目录一、java常用集合1、Java集合接口的作用2、Java集合常用实现类的作用二、Collection 常用的方法三、List 集合接口1、ArrayList类的常用方法2、LinkList类中的方法3、Vector4、ArrayList 类和 LinkedList 类的区别四、Set 集合1、HashSet 类2、TreeSet 类3、HashSet 和 Tre…...

机房意外掉电导致Elasticsearch的部分index无数据的修复过程

环境 :华为大数据集群FusionInsight V100R002C800SPC200、Elasticsearch 6.1.3、Kibana问题产生原因&#xff1a;因机房意外掉电导致集群部分机器两次掉电导致Elasticsearch重启&#xff0c;Elasticsearch重启后看似正常但某些index无数据。经排查判断为Elasticsearch的部分ind…...

Spring入门案例三:注解进行引用类型的自动装配

本系列文章将会带领大家进行Spring的全面学习&#xff0c;持续关注我&#xff0c;不断更新中… 一.案例分级 简单解析:配置类替代以前的配置文件&#xff0c;实体类提供对象&#xff0c;业务类中有实体类的引用对象&#xff0c;在业务层中实现引用类的自动装配。 二.各层代码…...

kubernet + kubevirt + ceph 汇总文档

目的 1 创建 kubenetes 集群 2 kubenetes 集群上部署 kubevirt 3 kubernetes 支持 ceph 存储 4 VMI 可以存储在 ceph rbd 存储中并正常使用 参考部署文档 名称连接备注centos8 + kubernetes 1.24 master/node 节点部署文档kubernetes 集群部署kubectl top node 使用方法部署文档…...

软件测试项目实战(附全套实战项目教程+视频+源码)

开通博客以来&#xff0c;我更新了很多实战项目&#xff0c;但一部分小伙伴在搭建环境时遇到了问题。 于是&#xff0c;我收集了一波高频问题&#xff0c;汇成本篇&#xff0c;供大家参考&#xff0c;避免重复踩坑。 如果你还遇到过其他坑和未解决的问题&#xff0c;可在评论区…...

Python seek()和tell()函数详解

在讲解 seek() 函数和 tell() 函数之前&#xff0c;首先来了解一下什么是文件指针。我们知道&#xff0c;使用 open() 函数打开文件并读取文件中的内容时&#xff0c;总是会从文件的第一个字符&#xff08;字节&#xff09;开始读起。那么&#xff0c;有没有办法可以自定指定读…...

数据库系统:1. 绪论

更好的阅读体验\huge{\color{red}{更好的阅读体验}}更好的阅读体验 文章目录1.1 数据库系统概述1.1.1 基本概念数据&#xff08;data&#xff09;数据库&#xff08;DataBase, DB&#xff09;数据库管理系统&#xff08;DataBase Management System, DBMS&#xff09;数据库系统…...

Android App开发基础

文章目录一 App的开发特点1.1 App的运行环境1.2 App开发语言1.3 java语言开发1.4 Kotlin语言开发1.5 XML1.6 App连接的数据库二 App的工程结构2.1 App工程目录结构2.2 构建工具Grade2.3 编译配置文件build.gradle2.4 运行配置文件AndroidManifest.xml2.4.1 application2.4.2 ac…...

力扣-分数排名

大家好&#xff0c;我是空空star&#xff0c;本篇带你了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;178. 分数排名二、解题1.错误示范①提交SQL运行结果2.错误示范②提交SQL运行结果3.正确示范①提交SQL运行结果4.正确示范②提交SQL运行结果5.正确示范③提交…...

图文详解Ansible中的变量及加密

文章目录一、变量命名二、变量级别三、.变量设定和使用方式1.在playbook中直接定义变量2.在文件中定义变量3.使用变量4.设定主机变量和清单变量5.目录设定变量6.用命令覆盖变量7.使用数组设定变量8.注册变量9.事实变量10.魔法变量四、JINJA2模板五、 Ansible的加密控制练习1.用…...

易语言做网站爆破工具/百度seo排名点击器app

说起物流大数据&#xff0c;你会想到什么? 因为量大&#xff0c;我首先想到的水&#xff0c;因为水会顺流而下&#xff0c;沿途支流不断汇集壮大&#xff0c;最后百川归海。同样地&#xff0c;数据流也会源源不断注入数据池、数据湖&#xff0c;于是有了信息海洋。 因为数据的…...

网站建设人员叫什么科目/排名查询系统

核心 核心 java函数用C语言实现逻辑 好处 C代码效率高,在某些情况下更适合. java代码 代码 public class Test {public native void show();public static void main(String[] args){System.load("/path/to/Test.so");(new Test()).show();} }说明 show和普通函数一样…...

天津做网站企业/安徽做网站公司哪家好

类类的概念在许多语言中出现&#xff0c;是面向对象编程的基础&#xff0c;很容易理解。抽象出不同物体的共同特征&#xff0c;根据相似性原则&#xff0c;把彼此相似的物体归于相同的类概念&#xff0c; 它将数据和操作进行封装&#xff0c;以便将来的复用。模块模块&#xff…...

九天智能建站软件/世界十大网站排名出炉

Andorid在M之后 将原有权限系统进行了重新的设计 &#xff0c;将权限分为两大块分别是NormalPermission 和Dangerous Permission 。不管是哪种权限都和M之前的系统一样 只要使用就需要在清单文件中进行注册 &#xff0c;但是对于Dangerous Permission 这样做还远远不够 &#x…...

小门店做网站/sem竞价推广怎么做

部署etcd集群 第一步&#xff1a;先拉取etcd二进制压缩包 wget https://github.com/coreos/etcd/releases/download/v3.3.2/etcd-v3.3.2-linux-amd64.tar.gz //解压压缩包 tar zxvf etcd-v3.3.2-linux-amd64.tar.gz 第二步&#xff1a;建立一个文件&#xff0c;分别存放bin文件…...

株洲做网站哪家好/游戏推广公司靠谱吗

样本&#xff1d;总体接受不精确相关性有时候比因果更值得追求因为因果很有可能是变化的&#xff0c;包含主观判断&#xff0c;但是相关性是实时的&#xff0c;事实性的&#xff0c;实用的。 但是不能说这样就放弃了对因果的追求&#xff0c;因为如果有 发现有价值的数据源是一…...