C++杂谈 为什么类的空指针对象可以访问类某些的成员函数

2023-10-27

class TestObject
{
public:
	TestObject()
	{
		std::cout << "TestObject!" << std::endl;
	}
	~TestObject()
	{
		std::cout << "~TestObject!" << std::endl;
	}
	void test()
	{
		std::cout << "Hello world in TestObject!" << std::endl;
	}
		static void testA()
	{
		std::cout << "Hello world in TestObject!" << std::endl;
	}
	virtual void testB()
	{
		std::cout << "Hello world in TestObject!" << std::endl;
	}
	void testC()
	{
		std::cout << m_age << std::endl;
	}
	void testD(int age)
	{
		std::cout << age << std::endl;
	}

private:
	int m_age;
};

int main(int argc, char* argv[])
{
	TestObject* testDemo= &TestObject();
	testDemo = nullptr;
	testDemo->test();
	testDemo->testA();
	testDemo->testB();	//崩溃
	testDemo->testC();	//崩溃
	testDemo->testD(50);
}

对比分析可以看出
test():普通成员函数,没有调用到this指针
testA():静态成员函数,不属于某个实例,没有调用到this指针
testB():虚函数,调用该函数时会用到this指针,而此时this指针为空,导致崩溃
testC():普通成员函数,调用该函数访问类中的成员变量会用到this指针,而此时this指针为空,导致崩溃
testD(50):普通成员函数,没有调用到this指针

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++杂谈 为什么类的空指针对象可以访问类某些的成员函数 的相关文章

  • 【千律】C++基础:获取数组中的最大值和最小值

    include
  • 【千律】C++基础:通过文件指针获取文件大小(字节数)

    include
  • c++基础2:使用VS2010 创建最简单的MFC应用程序窗体

    1 添加 新建项目 选择 VISUAL C MFC应用程序 确定 下一步 2 在 应用程序类型 中选择 基于对话框 下一步 3 在 用户界面功能 只选择 粗框架 下一步 4 在 高级功能 取消所有选择 下一步 5 生成的类 点击 完成
  • Cpp学习——动态内存管理

    目录 一 new 1 malloc realloc calloc的使用不便之处 2 new的好处 3 opreator new 二 delete 1 为什么要有delete 2 为什么要匹配使用 一 new 1 malloc realloc
  • 何为智能指针以及QT中的智能指针

    目的 对于指针的使用中有两个导致软件崩溃的问题 一是忘记释放动态申请的内存 二是指针指向的内存被释放 为了解决这个问题 出现了智能指针 效果 智能指针其实是一个类 在这个类的构造函数和析构函数实现以下功能 当有一个指针指向对象A时 计数器加
  • 【千律】C++基础:计算宽窄字节字符串所占用的字节数

    include
  • 如何重载前置++和后置++

    前置 即 运算符位于操作数的前面 例如 i 后置 即 运算符位于操作数后面 例如 i 注意一下几点 1 前置 重载时没有参数 而后置 重载时有参数 不会使用其参数 仅仅是区分用 可以理解为前置 后面有参数了 所以不需要参数 2 前置 需要返
  • vector中emplace_back和push_back详解,源码解读

    C 11之前 通常使用push back 向容器中加入一个右值元素 临时对象 的时候 首先会调用构造函数构造这个临时对象 然后需要调用拷贝构造函数将这个临时对象放入容器中 原来的临时变量释放 这样造成的问题是临时变量申请的资源就浪费 C 1
  • C++基础:for循环

    美好的知识点从出题开始 输出1 100所有的奇数 看到这道题 你可能有点懵 回顾标题 你找到办法了 但你不知道怎么写 来看看for循环的代码框架吧 for 控制变量初始化表达式 条件表达式 增量表达式 语句1 刚看到这 你肯定不太懂 我实际
  • 同步和异步的区别

    同步 同指一个进程在执行某个请求的时候 若该请求需要一段时间才能返回信息 那么这个进程将会一直等待下去 直到收到返回信息才继续执行下去 异步 是指进程不需要一直等下去 而是继续执行下面的操作 不管其他进程的状态 当有消息返回时系统会通知进程
  • c# 位运算符

    说来惭愧 今天看别人提供的源码 看了这些运算符竟然有些记不起来 在这里就记录一下 首先认识这些运算符 按位与 其实与 逻辑运算符有一致的地方 下面会讲到 按位或 同样与 有类似的地方 按位取反 按位异或 lt lt 左移运算符 gt gt
  • qt输出到控制台

    include
  • devC++强制关机代码shutdown(DAY 26)

    文章目录 1 代码实现 2 运行结果 恶搞同学 这种方式只用改个头文件 再在文章中间加一行输出即可 1 代码实现 2 运行结果 恶搞同学 增加编程乐趣 这种方式只用改个头文件 再在文章中间加一行输出即可
  • Cpp学习——list的模拟实现

    目录 一 实现list所需要包含的三个类 二 三个类的实现 1 list node 2 list类 3 iterator list类 三 功能实现 1 list类里的push back 2 iterator类里的运算符重载 3 list类里
  • 关于对象的引用作为参数,可以直接访问私有成员的问题

    include using namespace std class CPoint public CPoint int xx int yy x xx y yy CPoint const CPoint p x p x y p y private
  • LeetCode之最长公共子序列问题LCS解决方法

    Leetcode官网解答 使用动态规划原理 请参考原文地址 https leetcode cn com problems longest common subsequence solution zui chang gong gong zi
  • C++的文件操作open与close

    先看一下相应的打开文件的不同参数的作用 C open 打开文件 含打开模式一览表 打开模式可以用多个 但符号是 不是 注意啦 比如 ios in ios binary表示用二进制模式 以读取的方式打开文件 ios out ios binar
  • Cpp学习——类与对象3

    目录 一 初始化列表 1 初始化列表的使用 2 初始化列表的特点 3 必须要使用初始化列表的场景 二 单参数构造函数的隐式类型转换 1 内置类型的隐式类型转换 2 自定义类型的隐式类型转换 3 多参数构造函数的隐式类型转换 4 当你不想要发
  • Lambda表达式、std::function、和std::bind函数

    Lambda表达式 std function 和std bind函数 Lambda表达式 capture parameters mutable exception gt return type statement 1 capture 捕获外
  • C++函数模板与类模板

    目录 C 模板定义 函数模板 类模板 类模板的定义 模板的优缺点 模板的优点 模板的缺点 C 模板定义 C 模板允许程序员在通用编程中创建可重用的代码 这种编程技术基于模板的编

随机推荐

  • 在vue3里pinia的一些常规使用和实战

    安装 首先 我们需要安装 pinia 包 可以使用 npm 或 yarn 进行安装 npm install pinia yarn add pinia 创建 pinia 通过 defineStore 函数来创建一个 pinia import
  • Vue——事件绑定

    事件绑定 方法 v on 可以简写成 使用 两种方式 内联 直接把js写在标签上 调用方法 调用methods里定义的方法 事件修饰符 stop 阻止单击事件冒泡 prevent 提交事件不再重载页面 capture 使用事件捕获模式 se
  • 关于Unity中的NGUI和UGUI

    一 用Unity开发2D游戏 有三套关系 1 GUI Unity本身自带的GUI 2 NGUI 以前在Unity中广泛来做2D的 是第三方的包 需要安装 3 UGUI Unity5 X后 其实是Unity4 6以后 Unity找到NGUI的
  • 题目2681:蓝桥杯2022年第十三届省赛真题-矩形拼接JAVA实现下的思考

    先附上AC的代码 供大家参考 如果感兴趣的话 可以继续向下阅读 代码 package 2022年省赛Java大学C组真题 import java util Scanner public class Main f 分类考虑问题 以A B C为
  • r语言 求几个数的最小公倍数_(人教版)五年级下册第四单元:公倍数和最小公倍数资源包...

    人教版五年级下册资源包 课题 第四单元 公倍数和最小公倍数 教材P68 69 71内容 课程设计者 柳州市小数指导中心成员 柳州市柳北区长塘中心校 覃柳媛 柳州市第四十六中学教育集团 附小 罗怡 目标导学 学习目标 1 理解公倍数和最小公倍
  • 【基于 React + Three.js 第一人称3D星球游戏】01.在React中使用Three.js

    Three js DOM结构 来源 https threejsfundamentals org threejs lessons threejs fundamentals html Three js的大部分实例文件是直接写在HTML中 直接接
  • RocketMQ第二篇 单机版安装操作步骤

    MQ下载地址 下载RocketMQ 4 7 1版本 RocketMQ运行版本下载地址 https archive apache org dist rocketmq 4 7 1 rocketmq all 4 7 1 bin release z
  • 用Python做一个简单的表白程序

    我最近在看了一本Python tkinter从入门到精通 看了四章了 前面四章主要就是讲部件的共同属性 控件的布局 窗口的属性设置 于是利用这些做了个简单的程序 我将这个程序打包成了执行文件 放在了百度网盘 链接 https pan bai
  • Matlab小波神经网络(时间序列预测)

    Matlab 小波神经网络时间序列预测 时间序列数据 公共号 数据统计分析与挖掘 中回复 数据 获取本文所需数据 公共号 数据统计分析与挖掘 中回复 书籍 获取50本数据分析 python 统计学经典书籍 扫描二维码 回复 数据 获取本文所
  • Scala中的继承

    1 Scala中的扩展类 使用 extends 继承父类 eg abstract class People val name String def speak def info Unit printf this people s name
  • Nginx的alias/root/try_files实战

    项目背景 前端Vue项目 同时支撑PC网站 手机M站和手机App 在项目构建之后会有三个子目录作为路由分别对应m站 PC和APP 但是该项目作为一个服务对外提供服务需要一个统一的请求入口 比如 location xx root data w
  • cisco 3640 voip配置实例解析

    下面是一个Cisco 3640的VOIP配置 对方的结构是台北和上海两地做VOIP 后接阿尔卡特的PBX 这是我亲手做的 里面有很多有注意的地方 与大家一起分享快乐 如有看不懂的地方请问我 还有我加的注解 Taipei sh run Bui
  • Android_切换主题或皮肤的实现方式

    1 简介 使用自定义主题或者皮肤 可以将相关配置 颜色 大小等等 放在一个新的apk压缩文件中 目录结构保持一致 该apk文件放在任意可以访问到的目录即可 类似 system framework framework res apk 可根据软
  • Linux:haproxy部署--搭建nginx集群

    Haproxy介绍 Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一 它支持双机热备 虚拟主机 基于TCP和HTTP应用代理等功能 其配置简单 而且拥有很好的对服务器节点的健康检查功能 相当于keepalived健康检
  • 编写一求两个数的最大值的函数Max,要求用模板实现对任意数据类型数据都可应用该函数求取结果

    编写一求两个数的最大值的函数Max 要求用模板实现对任意数据类型数据都可应用该函数求取结果 在main 函数中分别用整型 实型 字符型数据进行测试 include
  • 打开用友软件提示 SQL Server口令怎么办?(含多种版本SQL Server数据库的安装方法)

    转自 http www ufidawhy com jcufida SQLServerkl html 用友财务软件提示 SQL Server口令怎么办 具体提示如下 由于SQL Server的超级用户口令修改过 用友网络财务软件不能连接到SQ
  • 清除Tomcat日志

    清除Tomcat日志 Tomcat日志清理日常必不可少 这里记录一下平时使用命令 0 查日志文件占空间大小 cd wltiot tomcat apache tomcat 7 0 99 logs ll ah 1 清除catalina out文
  • chrome控制台修改JS的变量值

    最近突然闲着没事想起来之前一个前端比较好玩的东西 然后记录一下 注注注 我是专业后台搬砖工 这是修改前的 所有流程都是正常走的 if里的也没有打印出来 然后 我们改改 坏笑 先进控制台在判断那块打出断点 然后找到右边的Global 所有的变
  • Ubuntu22.04安装CUDA和cuDNN详细过程记录

    文章目录 一 安装显卡驱动 二 安装CUDA 三 安装cuDNN 四 更换cuDNN版本 参考资料 一 安装显卡驱动 1 终端中输入以下命令获取显卡和驱动信息 ubuntu drivers devices 以我自己的机器为例 显示结果如下
  • C++杂谈 为什么类的空指针对象可以访问类某些的成员函数

    class TestObject public TestObject std cout lt lt TestObject lt lt std endl TestObject std cout lt lt TestObject lt lt s