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

【C/C++】空指针访问成员函数

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

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

示例:

#include <iostream>
#include <string>
using namespace std;//空指针访问成员函数
class Person {
public:void ShowClassName() {cout << "我是Person类!" << endl;}void ShowPerson() {//if (this == NULL) {//	return;//}cout << mAge << endl;}public:int mAge;
};void test01()
{Person * p = NULL;p->ShowClassName(); //空指针,可以调用成员函数p->ShowPerson();  //但是如果成员函数中用到了this指针,就不可以了
}int main() {test01();system("pause");return 0;
}

程序运行结果:

在这里插入图片描述

因为 p->ShowPerson() 访问了具体的成员变量mAge,却没有告诉函数访问的是哪个对象的mAge,因为C++实际调用的是:

void Person::ShowPerson(Person *this) {cout << this->mAge << endl;
}

相当于:

cout << null->mAge << endl;

p->ShowClassName() 不报错,仅仅是因为,它没有使用this指针,没有歧义。


可以添加对this指针是否为空的判断,增加代码健壮性。
void ShowPerson() {if (this == NULL) {return;}cout << mAge << endl;
}




相关文章:

  • 如何卸载干净 IDEA(图文讲解)windows和Mac教程
  • R -- 体验 stringdist
  • 【备忘录】SpringBoot+ dynamic-datasource配置自定义多数据源
  • 信号灯集,消息队列
  • 在Linux上编译gdal3.1.2指南
  • 自定义的卷积神经网络模型CNN,对图片进行分类并使用图片进行测试模型-适合入门,从模型到训练再到测试,开源项目
  • 计算机毕业设计选题推荐-超市售货微信小程序/安卓APP-项目实战
  • STM32:I²C通信原理概要
  • 可视化 | 数据可视化降维算法梳理
  • gorilla/websocket的chat示例代码简单分析
  • Web3公链之Cosmos生态的项目Celestia
  • Stable Diffusion系列(一):古早显卡上最新版 WebUI 安装及简单操作
  • Redis Functions 介绍(一)
  • go中“哨兵错误”的由来及使用建议
  • Docker compose容器编排
  • 2019年如何成为全栈工程师?
  • AHK 中 = 和 == 等比较运算符的用法
  • Apache的80端口被占用以及访问时报错403
  • C++类的相互关联
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Mybatis初体验
  • mysql 数据库四种事务隔离级别
  • vue数据传递--我有特殊的实现技巧
  • 前端技术周刊 2019-02-11 Serverless
  • 微信开放平台全网发布【失败】的几点排查方法
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ${factoryList }后面有空格不影响
  • %@ page import=%的用法
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (C++)八皇后问题
  • (C语言)字符分类函数
  • (算法)前K大的和
  • (一)基于IDEA的JAVA基础12
  • (转)linux下的时间函数使用
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .bat文件调用java类的main方法
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .net专家(张羿专栏)
  • /3GB和/USERVA开关
  • /boot 内存空间不够
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @SentinelResource详解
  • [ C++ ] STL---string类的模拟实现
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [30期] 我的学习方法
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略
  • [ABC294Ex] K-Coloring
  • [C#]winform利用seetaface6实现C#人脸检测活体检测口罩检测年龄预测性别判断眼睛状态检测
  • [C++] 多线程编程-thread::yield()-sleep_for()
  • [C++]运行时,如何确保一个对象是只读的
  • [CISCN2019 华北赛区 Day1 Web5]CyberPunk --不会编程的崽
  • [FROM COM张]如何解决Nios II SBTE中出现的undefined reference to `xxx'警告
  • [IE编程] 如何在IE8 下调试BHO控件/工具栏(调试Tab进程)