新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/26 6:06: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

相关资讯

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

较早相关资讯

最新相关资讯

Java IO、异常与File综合实战:文件分类整理工具详解 2026/9/26 6:54:48

Java IO、异常与File综合实战:文件分类整理工具详解

今天是Java学习打卡系列的第27天,主题是IO、异常和File的综合实战。走到这一步,说明你已经把基础语法、面向对象、集合这些东西都过了一遍,终于来到Java里最实用、也最容易翻车的一组内容了。很多人学到这里会觉得知识点太散——异常一堆概念…

阅读更多 →
Cursor 接入 DeepSeek API 完整教程:低成本实现 AI 编程 2026/9/26 6:54:47

Cursor 接入 DeepSeek API 完整教程:低成本实现 AI 编程

1. 为什么要在 Cursor 里接入 DeepSeek1.1 这套组合到底解决什么问题Cursor 是目前用起来最顺手的 AI 代码编辑器之一,它的 Tab 补全、多文件编辑、Agent 模式确实能省下大量敲键盘的时间。但用过一段时间的人都会碰到同一个问题:额度。Pro 版每个月的快…

阅读更多 →
AI编码助手告别聊天框:Agent式工作流与工程实践指南 2026/9/26 6:54:47

AI编码助手告别聊天框:Agent式工作流与工程实践指南

1. 别急着怀念聊天框:AI编码助手搬家背后藏着哪些真实变化这个标题乍看像是一种吐槽,但我作为常年泡在代码工程一线的使用者,反而觉得这是一件好事。AI编码助手从“对话框里聊需求”转向“在编辑器和终端里干活”,不是产品经理拍脑…

阅读更多 →
基于Spring Boot的商业大数据分析与运营平台开发实战 2026/9/26 6:54:47

基于Spring Boot的商业大数据分析与运营平台开发实战

每年三四月份,总有一批人被“基于SpringBoot的商业大数据分析与运营平台”这类题目卡住。题目听起来并不难,无非是用 Spring Boot 搭一个后台,再配上一堆图表;真正动手之后才会发现,数据从哪来、清洗成什么样、指标怎么…

阅读更多 →
PCtoLCD2002本质解析:嵌入式串口屏硬核调试工具 2026/9/26 6:54:47

PCtoLCD2002本质解析:嵌入式串口屏硬核调试工具

1. 这不是普通串口屏工具:PCtoLCD2002的本质定位与适用边界很多人第一次在论坛或老工程师的U盘里看到“PCtoLCD2002”这个文件名,下意识以为是个“串口屏调试助手”——点开exe就弹窗、拖几个控件、发几条指令,搞定。但实际用过两周以上的人很…

阅读更多 →
Python函数与面向对象进阶:从实战技巧到设计模式 2026/9/26 6:54:40

Python函数与面向对象进阶:从实战技巧到设计模式

函数是Python里最灵活的部分,面向对象则是组织代码的核心方式。这个“python555.函数与面向对象(2)”的标题一看就是系列教程的第二篇,说明读者已经有了一定的基础,接下来要接触的是更进阶的玩法。今天不聊那些教科书式的概念定义&#xff0c…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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