C++核心编程——P34+35-空指针返回成员函数+const修饰成员函数

2023-09-20 17:16:15

空指针返回成员函数

C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针,如果用到this指针,需要加以判断来保证代码的健壮性。

#include<iostream>
using namespace std;
class Person
{
public:
	void ShowClassName()
	{
		cout << "this is Person class" << endl;
	}
	void ShowPersonAge()
	{
	
		//提高健壮性,空的就直接返回,防止代码崩溃
		if (this == NULL)
		{
			return;
		}
		//报错原因是因为传入的指针是NULL——无中生有,用一个空指针访问里面的属性 
		cout << this->m_Age << endl;
	}
	int m_Age;
};
void test()
{
	Person* p = NULL;
	p->ShowClassName();
	p->ShowPersonAge();
}
int main(void)
{
	test();
	system("pause");
	return 0;
}

const修饰成员函数

常函数

  • 成员函数后加const后我们称这个函数为常函数
  • 常函数不可以修改成员属性
  • 成员属性声明时加关键字mutable后,在常函数中依然可以修改

常对象

  • 声明对象前const称该对象为常对象。
  • 常对象只能调用常函数。
#include<iostream>
using namespace std;
//常函数
class Person
{
public:
	//this指针的本质是指针常量,指针的指向是不可以修改的
	//就相当于Person *const this;
	//在成员函数后面加const修饰的是this指向,让指针指向的值也不可以修改
    //const Person * const this:
	void showPerson() const//加个const就不允许修改了
	{
		this->m_b = 100;
		//this = NULL;tbhis指针是不可以修改指针的指向的
	}
	int m_a;
	mutable int m_b;//加了mutable修饰的特殊变量,即使在常函数,常对象中,也可以修改这个值

	void func()
	{
		m_a = 100;//在普通成员函数中是可以修改的
	}
};
void test()
{
	Person P;
	P.showPerson();
}
//常对象
void test1()
{
	const Person p;//在对象前加const,变为常对象,对象的属性不可以修改
	//p.m_a = 100;
	p.m_b = 100;//mutable 关键字修饰了
	//常对象只能调用常函数 
	p.showPerson();
    //p.func();常对象不能调用普通成员函数,因为普通成员函数可以修改属性。	
}
int main(void)
{
	test();
	system("pause");
	return 0;
}

更多推荐

【腾讯云】打造未来智能应用的基石:腾讯混元大模型

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成,愿将昔日所获与大家交流一二,希望对学习路上的你有所助益。同时,博主也想通过此次尝试打造一个完善的技

Python数据分析的增强式AI库

迷途小书童读完需要4分钟速读仅需2分钟1引言近年来,随着数据集的不断增大和复杂性的提高,数据分析变得越来越具有挑战性。在Python中,Pandas一直是处理和分析结构化数据的首选库。然而,随着人工智能的发展,我们需要一种能够轻松应对这些挑战的工具。幸运的是,PandasAI应运而生,它将Pandas的强大功能与人工智

合肥对新通过(CMMI)五级、四级、三级认证的软件企业,对新通过信息技术服务标准(ITSS)认证的软件企业,给予最高50万奖励

合肥市加快软件产业发展推进软件名城创建若干政策实施细则为贯彻落实《合肥市人民政府办公室关于印发合肥市加快软件产业发展推进软件名城创建若干政策的通知》(合政办〔2023〕9号)文件精神,规范政策资金管理,制定本实施细则。一、申报主体在合肥市行政区域范围内注册成立、具有独立法人资格的软件企业或软件园区运营单位。本实施细则中

SpringMVC自定义注解

目录一,Java注解简介1.java注解的定义2.Java注解分类2.1JDK基本注解2.2JDK元注解2.3自定义注解二,自定义注解如何自定义注解?三,Aop自定义注解的应用四,总结一,Java注解简介1.java注解的定义Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配

网页游戏如何开发网页游戏类型有哪些?

随着互联网的普及和技术的发展,网页游戏已经成为娱乐和休闲活动的重要组成部分。无需安装任何应用程序,只需打开浏览器,您就可以畅玩各种类型的网页游戏。然而,开发网页游戏并不是一项容易的任务,因为不同类型的游戏需要不同的开发方式和技术。在本文中,我们将探讨一些常见的网页游戏类型以及它们的开发方式。1.休闲游戏开发休闲游戏通常

【B+树索引】索引的使用和注意事项

索引的使用和注意事项一、索引的注意事项根节点是不会变的!内节点中目录项记录的唯一性一个页面至少容纳两条记录二、回表的代价三、更好的使用索引四、索引的代价一、索引的注意事项上一篇【B+树索引】索引页的结构含有可以快速查询的秘密从索引页的角度认识了MySQL为了提升查询速率,使用了B+树的数据结构对索引页进行了内存存储。以

【2023华为杯B题】DFT类矩阵的整数分解逼近(思路及代码下载)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳️座右铭:行百里者,半于九十。📋📋📋本文目录如下:🎁🎁🎁目录💥1概述📚2详细数学模型及题目、数据🎉3参考文献🌈4Matlab代码及思路实现💥1概述离散傅里叶变换(Discre

爬虫逆向实战(34)-某视综数据(MD5、AES)

一、数据接口分析主页地址:某视综1、抓包通过抓包可以发现数据接口是/rank/waiting/fans2、判断是否有加密参数请求参数是否加密?通过查看“载荷”模块可以发现有一个sign参数请求头是否加密?无响应是否加密?通过查看“响应”模块可以发现数据是加密的cookie是否加密?无二、加密位置定位1、sign(1)看

c++八股day3-c++什么时候生成默认拷贝构造函数

背景:如果不提供,就是浅拷贝,即位拷贝(把值按字节复制过去)位拷贝的危害:1、比如某个类的对象当中有堆上的资源(里面有一个指针指向了堆上的资源)2、文件句柄、socket3、虚函数表指针可能会丢失。。。如果是位拷贝,就会出现两个对象持有相同的堆上资源、文件句柄如果有一个对象释放,释放时会把堆上资源进行释放,把文件句柄进

App测试中ios和Android有哪些区别呢?

App测试中,大家最常问到的问题就是:ios和Android有什么区别呢?在Android端,我们经常会使用JavaScript、HTML、CSS等技术来编写一些简单的UI界面。而iOS端,我们经常会使用到UI设计、界面布局、代码结构、API等技术来开发一款App。那究竟有什么区别呢?作为一名开发者,应该了解一些基础知

JVM——4.垃圾回收

这篇文章我没来讲一下JVM中的垃圾回收。这是比较重要,内容也比较多的一篇文章。目录1.垃圾回收概述2.如何判断对象可以回收2.1引用计数法2.2可达性分析算法2.2.1GCRoot的选取2.3再谈引用2.3.1强引用2.3.2软引用2.3.3弱引用2.3.4虚引用2.3.5终结器引用2.3.6引用小结3.垃圾回收算法3

热文推荐