新闻详情

新闻详情

首页 / 资讯中心 / 详情

C++学习日记 Day6:静态成员+this指针+空指针+常函数/常对象

发布时间:2026/11/14 14:48:48来源:尧图网络
C++学习日记 Day6:静态成员+this指针+空指针+常函数/常对象
## 今天学了什么今天学习C的静态成员函数/变量、C对象模型和this指针、空指针访问成员函数以及常函数、常对象。## 静态成员定义在成员变量和成员函数前加上关键字static。分类静态成员分为静态成员变量和静态成员函数。### 静态成员变量所有对象共享同一个数据在编译阶段分配内存类内声明类外初始化。#include iostream using namespace std; class Person { public: void func() { cout m_age endl; } static int m_age; }; int Person::m_age 100; //类外初始化 void test() { Person p; p.func(); } int main() { test(); return 0; }Ⅰ. 访问静态成员变量的方式有两种①通过对象进行访问Person p;p.m_a;②通过类名访问Person::m_aⅡ.有访问权限在private下的变量类外无法访问。### 静态成员函数不属于某个对象属于类所有对象共享同一个函数静态成员函数只能访问静态成员变量原因静态成员函数不属于任何对象没有this指针所以无法访问非静态成员。Ⅰ. 访问方式有两种①通过对象进行访问Person p;p.func();②通过类名访问Person::func();Ⅱ.有访问权限在private下的函数类外无法访问。## this指针类内的成员变量和成员函数分开储存只有非静态成员变量储存在类的对象上。*注空对象占用内存空间为1字节sizeof原因编译器会给每个空对象分配一个字节空间是为了区分空对象占用内存的位置每个空对象有一个独一无二的内存地址。this指针多个同类型对象会共用一块实例代码代码无法区分哪个对象调用自己this指针指向被调用的成员函数所属的对象用于解决以上问题。用途当形参和成员变量同名时可以用this指针区分在类的非静态成员函数中返回对象本身Person classfun(int b){this-b b;return *this;}可用于链式编程b.classfun(6).classfun(1).classfun(5); //输出结果12发现关于链式编程返回值必须加引用如果不加b的值不会叠加。原因返回*this 时不加 则返回拷贝了一个临时变量所以除了第一次b的值被修改以外后面的调用无效。## 空指针访问成员函数测试定义一个空指针分别访问带有/不带成员变量的函数#include iostream using namespace std; class Person { public: void showPersonaAge() { cout m_age endl; } void showClassName() { cout This is Person class. endl; } int m_age; }; void test() { Person *pNULL; p-showClassName(); p-showPersonaAge(); } int main() { test(); return 0; }运行报错在访问成员变量那下一个断点进调试发现this指针的地址一直为0导致运行出错。结论C中空指针可以调用成员函数成员函数放在代码段如果不访问成员变量代码能跑。在日常写代码中可用 ifthisnullptr) 增加代码建设性但更推荐在调用方保证指针非空。## 常函数/常对象### 常函数成员函数后加const。常函数内不可以修改成员属性;如果存在特殊情况需要修改成员属性则需在成员属性声明时在成员属性前加关键字 mutable。#include iostream using namespace std; class Person { public: void func() { m_age 10; cout 普通成员函数 m_age endl; } void fun () const { //m_age 10; //this-m_age 无法修改 cout 常函数 m_age endl; } int m_age0; }; void test() { Person p; p.func(); p.fun(); } int main() { test(); return 0; }在访问常函数处下一个断点进入调试发现this指针的类型为 const Person*这就是常函数无法修改成员属性的原因。### 常对象声明对象前加const。const Person p;** 常对象只能调用常函数 **原因常对象不能调用普通函数因为普通函数可以修改成员属性与const不能修改值产生冲突。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/14 3:51:47

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/12 23:59:09

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/13 13:31:48

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/13 16:11:45

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/14 3:51:43

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉