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 ++ 数组

    目录 寻找最大 最小值 数组 寻找最大 最小值 对于这个编程测验 我们将找到用户将输入的15个数字的最小值和最大值以及平均值 include
  • 【千律】C++基础:List 链表循环删除元素,及其报错的解决方案

    报错原因 采用erase移除迭代器后 迭代器的值变为 572662307 无法作为迭代器继续运算 详细 当程序执行到 list int erase itor 时 满足条件的第一个元素被删除 从而导致 itor 指针被删除 使其不指向任何元素
  • 【千律】C++基础:计算宽窄字节字符串所占用的字节数

    include
  • C++,引用和指针

    引用指的是对什么的引用 是地址引用吗 这不和指针一样吗 引用 Reference 是C 中一种特殊的变量类型 它可以被看作是对另一个变量的别名 即某个变量的引用 引用不是地址引用 它是在语法层面提供的一种更直观 更安全的方式来访问和修改其他
  • 如何重载前置++和后置++

    前置 即 运算符位于操作数的前面 例如 i 后置 即 运算符位于操作数后面 例如 i 注意一下几点 1 前置 重载时没有参数 而后置 重载时有参数 不会使用其参数 仅仅是区分用 可以理解为前置 后面有参数了 所以不需要参数 2 前置 需要返
  • Cpp学习——string(2)

    目录 编辑 容器string中的一些函数 1 capacity 2 reserve 3 resize 4 push back 与append 5 find系列函数 容器string中的一些函数 1 capacity capacity是str
  • std::vector如何使用

    Vector被认为是一个容器 是因为它可以存放各种类型的对象 正因为这 有时候也被人叫动态数组 能够增加和压缩数据 为了使用vector 必须在头文件中包含如下代码 include
  • 【千律】C++基础:函数的重载

    include
  • Cpp学习——list的模拟实现

    目录 一 实现list所需要包含的三个类 二 三个类的实现 1 list node 2 list类 3 iterator list类 三 功能实现 1 list类里的push back 2 iterator类里的运算符重载 3 list类里
  • C++ 内存模型

    C 内存模型 未完 数据存储 程序数据段 程序代码段 stack栈内存 栈内存属于执行期函数 编译时确定大小 函数执行时栈空间自动分配 结束时栈空间自动销毁 栈对象是线性分配 连续排列 没有内存碎片化效应 栈内存具有函数本地性 不存再多线程
  • c#10(密封类和密封方法,异常)

    密封类和密封方法 异常 一 密封类 密封类可以用来限制扩展性 如果密封了某个类 则其他类不能从 该类继承 如果密封了某个成员 则派生类不能重写该成员的实现 默认情况下 不应该密封类和成员 密封可以防止对库的类型和成员进行自定义 C 中使用密
  • Qt对Excel表格的自动化调用汇总(新建、打开和保存)

    为便于实时采集并保存数据到excel 需要调用QAxObject 首先定义变量excel workbooks workbook worksheets worksheet range 等 ifndef EXCEL H define EXCEL
  • virtualenv: error: unrecognized arguments: --no-site-packages

    使用virtualenv version 看到自己的版本大于20 就可以将如下这段删除 export VIRTUALENVWRAPPER VIRTUALENV ARGS no site packages 我碰到的情况下 user makef
  • LeetCode之最长公共子序列问题LCS解决方法

    Leetcode官网解答 使用动态规划原理 请参考原文地址 https leetcode cn com problems longest common subsequence solution zui chang gong gong zi
  • 斗地主AI算法之发牌,洗牌

    斗地主游戏的基本算法实现 by wojiushi3344 转载请说明出处 源代码下载 PS 首先祝朋友们5 1节快乐 闲来无事 今天来写一下斗地主游戏的基本实现 写得不好 大家别喷哈 具体实现还得参见源代码 朋友们如果你有更好的建议可以到我
  • C++类和对象:补充拷贝构造

    前言 如果一个类中什么成员都没有 简称为空类 空类中什么都没有吗 并不是的 任何一个类在我们不写的情况下 都会自动生成下面6个默认成员函数 目录 一 六大函数 1 构造函数 1 定义 2 特性 3 赋值 4 初始化列表 2 拷贝构造函数 3
  • C++四种类型转化

    文章目录 static cast const cast reinterpret cast 重新解释 dynamic cast static cast 该运算符把expression转化为type name类型 static cast在编译时
  • c++通讯录管理系统

    系统需求 代码 include
  • 深入研究C++多态(虚函数和虚继承)

    文章目录 多态的引入 虚函数表 几种常见继承关系中的类内存分布 单继承 多继承 菱形继承 总结 作者 狗子孙 链接 https www jianshu com p 02183498a2c2 来源 简书 简书著作权归作者所有 任何形式的转载都
  • 【千律】C++基础:打开并下载网页 -- ShellExecuteEx 和 URLDownloadToFile 函数

    include

随机推荐

  • 在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