C++空指针访问成员函数、const修饰成员函数

空指针访问成员函数

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


```cpp
class Person
{
public:
	void showClassName()
	{
		cout << "this is Person class" << endl;
	}
	void showPersonAge()
	{
		cout << "age = " <<m_Age <<endl;
	}
	int m_Age;
};
void test01()
{
	Person* p = NULL;//创建Person类型的指针,赋值为空
	p->showClassName();//利用空指针调用成员函数
	p->showPersonAge();
}

int main()
{
	test01();
	system("pause");
	return 0;
}

会报错
若将 p->showPersonAge(); 注释掉就没问题,但要执行该语句。就会调用void showPersonAge()
中的cout << "age = " <<m_Age <<endl; 。
一般在属性(此处为m_Age)的前面默认加一个this->,即this->m_Age
因为this指向的是传入的对象,p 。 但指针p为空,所以传入的指针为空,没有确定的对象,无法访问对象里面的属性。
可以加一个if

if(this -> NULL)
{
return;
}

const修饰成员函数

常函数:
1 加const的成员函数
2 常函数内不可以修改成员属性
3 成员属性声明时加关键字mutable后,在常函数中依然可以修改。
常对象:
1 声明对象前加const的对象
2 常对象只能调用常函数

不论写不写this,成员函数中都有this指针来修饰m_A,
即 this->m_A;
this的本质是一 指针常量 ,其指针的指向是不可以修改的,只能指向对象 p ,与加不加const无关。但是此时指针指向对象的值m_A是可以修改的。如下图,
在这里插入图片描述

但如果写了const ,就无法修改对象的值。
在这里插入图片描述
理解作:
一般 this 可以理解为 Person * const this ; //Person类指针 + 指向不可修改。
若写为 const Person * const this ; // /Person类指针 + 指向不可修改+ 值不可修改。

在实际中写作:
在这里插入图片描述
在成员函数后面加const ,修饰的是this 指向,让指针指向的值也无法修改。即为 常函数 。

在这里插入图片描述
但想要在常函数中修改其值,需要在该变量前加 mutable关键字 此时不会报错。

常对象:
const Person p; // 在对象前加const ,变为常对象。不可修改指针指向的值。
在这里插入图片描述
这里的m_A 无法修改 。因为m_B前加了mutable ,所以在常对象下也可修改。

且常对象只能调用常函数, 若在Person类中添加 普通函数
void func()
{ }
然后在test02中调用,是会报错的
在这里插入图片描述
原因是,在普通的函数中,是可以修改 m_A 的,但是常函数中是作为不可修改的,为了防止错误,所以不可让常对象调用普通成员函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值