对象模型和this指针(个人学习笔记黑马学习)

1、成员变量和成员函数

#include <iostream>
using namespace std;
#include <string>//成员变量和成员函数分开存储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;
}


2、this指针的用途

#include <iostream>
using namespace std;
#include <string>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;
}

3、空指针访问成员函数

#include <iostream>
using namespace std;
#include <string>class Person {
public:void showClassNmae() {cout << "this is	Person class" << endl;}//报错原因是因为传入的指针是为NULLvoid showPersonAge() {if (this == NULL) {return;}cout << "age = " << m_Age << endl;}int m_Age;
};void test01() {Person* p = NULL;p->showClassNmae();//p->showPersonAge();报错
}int main() {test01();system("pause");return 0;
}

4、const修饰成员函数

常函数:

  • 成员函数后加const后我们称为这个函数为常函数
  • 常函数内不可以修改成员属性
  • 成员属性声明时加关键字mutable后,在常函数中依然可以修改

常对象:

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

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

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

相关文章

LeetCode 1921. Eliminate Maximum Number of Monsters【贪心,计数排序】1527

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

供应链 | 顶会CIKM论文精读:面向大规模三维装箱问题的数据驱动树形搜索算法

论文解读&#xff1a;丁建辉&#xff0c;李明哲&#xff0c;赵艳蓉&#xff0c;孙楚天 编者按 本次解读的文章发表于CCF-B类会议30th ACM International Conference on Information and Knowledge Management。摘要总结如下&#xff1a; 3维装箱问题&#xff08;3D-BPP&#…

Redis的缓存穿透,缓存击穿,缓存雪崩

1. 缓存穿透 什么是缓存穿透&#xff1f; 缓存穿透说简单点就是大量请求的 key 是不合理的&#xff0c;根本不存在于缓存中&#xff0c;也不存在于数据库中 。这就导致这些请求直接到了数据库上&#xff0c;根本没有经过缓存这一层&#xff0c;对数据库造成了巨大的压力&…

雪花算法生成id分析与实践

目录 1 什么是雪花算法&#xff1f; 结构 优点 缺点 2 在java中使用 使用注意&#xff1a; 测试代码 效果 1 什么是雪花算法&#xff1f; witter的雪花算法&#xff08;Snowflake Algorithm&#xff09;。雪花ID是一种分布式唯一ID生成算法&#xff0c;旨在解决分布式…

业绩走低,毛利率下滑,海外市场能否成为极米科技救命稻草?

撰稿|行星 来源|贝多财经 8月30日&#xff0c;成都极米科技股份有限公司&#xff08;SH:688696&#xff0c;下称“极米科技”&#xff09;发布2023年半年度业绩报告。财报显示&#xff0c;极米科技2023年上半年的业绩出现了大幅下滑&#xff0c;其中收入同比减少两成&#xf…

代码随想录二刷day06

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣242. 有效的字母异位词二、力扣349. 两个数组的交集三、力扣202. 快乐数四、力扣1两数之和 前言 一、力扣242. 有效的字母异位词 class Solution {pub…

数学建模-点评笔记 9月3日

1.摘要&#xff1a;关键方法和结论&#xff08;精炼的语言&#xff09;要说明&#xff0c;方法的合理性和意义也可以说明。 评委先通过摘要筛选&#xff08;第一轮&#xff09; 2.时间序列找异常值除了3西格玛还有针对时间序列更合适寻找的方法 3.模型的优缺点要写的详细一点…

世微AP9234 升压型DC/DC LED恒流驱动

描述 AP9234是一款由基准电压源、振荡电路、误差放大电路、相位补偿电路、电流限制电路等构成的CMOS升压型DC/DC LED驱动。由于内置了低导通电阻的增强型N沟道功率MOSFET&#xff0c;因此适用于需要高效率、高输出电流的应用电路。另外&#xff0c;可通过在VSENSE端子连接电流…

754. 到达终点数字

754. 到达终点数字 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a; 原题链接&#xff1a; 754. 到达终点数字 https://leetcode.cn/problems/reach-a-number/description/ 完成情况&#xff1a; 解题思路&#xff1a; 牛顿莱布尼茨梯…

softmax的cuda编程详细解读——算子融合

softmax介绍 在上一篇博客我们介绍了softmax的内容以及相关的编程实现,总结一下softmax的特点如下:(没有特殊说明的情况下,考虑的仍然只是1D向量 x x x) 1:获得向量的全局最大值M 2:针对向量 x ^ = { exp ⁡ ( x i −

vue3 组件通信方式

文章目录 组件通信方式props自定义事件全局事件总线v-modeluseAttrsref与$parentprovide与injectpiniaslot 组件通信方式 props ​ 实现父子组件通信,在vue3中可以通过defineProps获取父组件传递的数据。且在组件内部不需要引入defineProps方法可以直接使用&#xff01; 父组…

SWAT-MODFLOW地表水与地下水耦合

耦合模型被应用到很多科学和工程领域来改善模型的性能、效率和结果&#xff0c;SWAT作为一个地表水模型可以较好的模拟主要的水文过程&#xff0c;包括地表径流、降水、蒸发、风速、温度、渗流、侧向径流等&#xff0c;但是对于地下水部分的模拟相对粗糙&#xff0c;考虑到SWAT…

ConsoleApplication815项目(直接加载+VEH Hook Load)

上线图 ConsoleApplication815.cpp #include <iostream> #include<Windows.h> #include "detours.h" #include "detver.h" #pragma comment(lib,"detours.lib")#pragma warning(disable:4996)LPVOID Beacon_address; SIZE_T Beacon…

leetcode分类刷题:哈希表(Hash Table)(三、循环存在问题)

1、当需要快速判断某元素是否出现在序列中时&#xff0c;就要用到哈希表了。 2、本文针对的总结题型为给定的序列或需要构造的序列中是否存在循环&#xff0c;与 160. 相交链表、 141. 环形链表、142. 环形链表 II的题型一样。 202. 快乐数 这道题还考察如何对正整数求解各个位…

用js的moment插件判断日期的格式是否符合‘YYYY-MM-DD‘

可以使用moment插件中的isValid()方法来判断一个日期字符串是否符合YYYY-MM-DD格式。 示例代码&#xff1a; const dateStr 2021-08-01; const dateFormat YYYY-MM-DD;const isValidDate moment(dateStr, dateFormat, true).isValid();console.log(isValidDate); // true这…

敏捷开发、V模型开发、瀑布模型

在软件开发领域&#xff0c;敏捷开发和V模型开发是两种主要的开发方法。它们之间的差异主要体现在开发过程的结构和组织方式上。在以下讨论中&#xff0c;我们将深入探讨这两种方法的特点和差异。 敏捷开发 敏捷开发是一种迭代和增量的软件开发方法&#xff0c;它强调灵活性和…

初识matlab

清空环境变量及命令 clear all 清除Workspace中的所有变量clc 清除Command Window中的所有命令 变量名命名规则 变量名区分大小写变量名长度不超过63位变量名以字母开头&#xff0c;可以由字母、数字和下划线组成&#xff0c;但不能使用标点变量名应简洁明了&#xff0c;通过…

Redis执行lua脚本-Time函数-获取当前时间

演变过程&#xff1a; TIME 命令返回当前服务器的时间&#xff0c;包含两个条目 Unix 时间戳和这一秒已经过去的微秒数。 eval " local res redis.call(time); return res; " 0 eval " local current_time redis.call(TIME) local unix_timestamp tonumb…

rz命令无法正常使用?

使用rz命令上传文件时出现如下问题&#xff1a; 这里用的是mobaxterm终端 改用xshell,secureCRT即可正常使用&#xff1a;

vscode调教配置:快捷修复和格式化代码

配置vscode快捷键&#xff0c;让你像使用idea一样使用vscode&#xff0c;我们最常用的两个功能就是格式化代码和快捷修复&#xff0c;所以这里修改一下快捷修复和格式化代码的快捷键。 在设置中&#xff0c;找到快捷键配置&#xff1a; 然后搜索&#xff1a;快捷修复 在快捷键…