类与对象(二)续

在《类与对象(二)》中提到了类会生成六个默认成员函数,并且介绍了前四个默认成员函数,本篇来介绍最后两个默认成员函数和const修饰类的成员函数。


目录

1. const修饰类的成员函数

2. 取地址操作符重载

3. const取地址操作符重载

总结


1. const修饰类的成员函数

const修饰类成员函数,实际修饰该成员函数隐含的 this 指针,被修饰的 this 指针中的成员不能再被修改。

举例:

没有被const修饰的类的成员函数:

再来看一个函数:

d.Print() 经过编译器处理为 d.Print(&d) , 而函数 func 的形参类型是 const Date ,

即 d 的类型为 const Date ,

那么 d.Print(&d) 中 &d 传给 类中成员函数 Print 的形参上 ,形参的类型应该为 const Date* ,即指针指向的内容不能被修改

而类中成员函数 this 指针的类型是 Date* const ,指针指向的内容可以被修改,const修饰的是 this 指针,this 指针初始化后不能被更改

实参类型const Date*  传给形参类型  Date* const ,这样就造成了权限放大问题,因此会报错。

由上述分析可知,我们只需要将 

void Print(Date* contst this) 变为 void Print(const Date* contst this)

但是void Print(Date* contst this) 是编译器处理的,我们不能自己写上去

因此c++ 中是可以让我们这样解决的const添加问题:

那么什么情况可以在成员函数后加 const 呢?

当函数成员中不修该指针所指向的内容是,成员函数后可以加 const 

若声明和定义分离,声明和定义都要加 const

2. 取地址操作符重载

示例:

	Date* operator&()
	{
		return this;
	}

3. const取地址操作符重载

示例:

	const Date* operator&() const
	{
		return this;
	}

总结

到底调用取地址操作符重载还是const取地址操作符重载,是由取地址对象的类型决定的

取地址操作符重载和const取地址操作符重载是默认成员函数

即使不创建也会默认生成

什么时候需要自己写:

当不想让别人拿到真实地址的时候,可以自己写,返回其他地址,比如空指针:

	Date* operator&()
	{
		return nullptr;
	}

	const Date* operator&() const
	{
		return nullptr;
	}

  • 16
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今年依旧去年春

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值