栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > C/C++/C#

类与对象(二)续

C/C++/C# 更新时间:发布时间: 百科书网 趣学号

在《类与对象(二)》中提到了类会生成六个默认成员函数,并且介绍了前四个默认成员函数,本篇来介绍最后两个默认成员函数和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;
	}

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/925381.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号