本文主要介绍该指针在C语言中用法的详细说明以及相关的实例资料。有需要的朋友可以参考一下。
C++中this指针用法详解及实例
概要:
简要介绍了该指针的基本概念,并通过一个实例介绍了该指针的两种用法,一种用于防止变量命名冲突,另一种用于类中的级联调用。
this指针概览
c,每个类对应一个对象,每个对象用这个指针指向自己的内存地址。在类中,此指针作为变量通过编译器隐式传递给非静态成员函数。因为这个指针不是对象本身,所以sizeof函数不能用来确定这个指针对应的对象的大小。这个指针的具体类型与具体对象的类型以及对象是否由const关键字修饰有关。比如在Employee类的非常数函数中,这个指针的类型是Employee,如果是常量函数,这个指针的类型就是const Employee。因为这本身是一个指向对象的指针,所以像*this这样的指针移除操作会得到这个类中对象的地址。该指针的使用示例如下:
本文中的代码参考和免责声明:
/**************************************************************************
*(C)1992-2012年版权归Deitel Associates,Inc .所有,并且*
*培生教育有限公司。保留所有权利。*
* *
*免责声明:本书的作者和出版商使用了他们的*
*尽最大努力准备这本书。这些努力包括*
*理论和程序的开发、研究和测试*
*确定其有效性。作者和出版商制作*
*不提供任何明示或暗示的担保*
*程序或这些书中包含的文档。作者*
*在任何情况下,出版者不对附带的或*
*与*相关或由其引起的间接损害赔偿
*这些程序的提供、执行或使用。*
**************************************************************************/
Test.h文件:
#ifndef TEST_H
#定义测试_H
分类试验
{
公共:
显式测试(int=0);//默认构造函数
void print()const;
私人:
int x;
};//结束类测试
#endif /* TEST_H */
Test.cpp文件:
#包含“Test.h”
#包括iostream
使用命名空间std
//构造函数
Test:Test(int value):x(value){ }
//使用隐式和显式this指针打印x;
//需要*this两边的括号
void Test:print()常量
{
//隐式使用this指针访问成员x
cout ' x=' x
//显式使用this指针和箭头运算符
//访问成员x
cout ' \ n this-x=' this-x;
//显式使用取消引用的this指针和
//访问成员x的点运算符
' cout '\n(*this)。x='(*这个)。x endl
} //结束函数打印
main.cpp中的调用示例:
#包含“Test.h”
int main()
{
测试testObject(12);//实例化并初始化testObject
testobject . print();
返回0;
} //结束main
在这个例子中,因为这本身就是一个指针,所以类中变量x的读写方式是this-x,注意这个变量是隐式传递的,所以直接在同一个类中的成员函数中调用x变量的效果相当于通过这个指针调用x。对象地址是通过使用这个被指定的变量获得的,所以通过对象地址调用变量的方法是使用点运算符。
在介绍了这个指针获取变量的方式之后,接下来,本文将介绍这个指针的两个功能。
一、this指针用于防止类中的变量冲突
这个指针可以用来防止与传入的参数变量名相同的数据字段导致的问题。以下面的过程为例:
Time.h文件
//这里省略了定义头
上课时间
{
公共:
//.这里省略了几行不重要的部分。
time setHour(int);//设置小时
time set minute(int);//设置分钟
time setSecond(int);//设置秒数
//.这里省略了几行不重要的部分。
私人:
无符号整数小时;//0 - 23 (24小时制格式)
无符号整数分钟;//0 - 59
无符号整数秒;//0 - 59
};//结束上课时间
Time.cpp文件:
//设置小时值
Time Time:setHour( int hour ) //注意时间返回
{
if(小时=0小时24分)
this-hour=小时;
其他
抛出invalid_argument('小时必须是0-23 ');
返回* this//启用级联
} //结束函数setHour
//设置分和设置秒的写法类似。
这里代码的输入参数命名为hour,hour的赋值对象也是这种私有变量hour。此时,用这个指针指向小时变量可以防止命名重复。注意,前面提到的代码的返回值是指向这个对象的指针,这与本文要分析的第二点有关。
二、this指针用于层叠式调用
通过返回这个类的指针,实际上是返回了这个类的地址。那么这个类可以级联调用。比如上面提到的Time对象,主程序调用示例如下:
Main.cpp文件:
//省略不重要的预处理指令和使用命令
#include 'Time.h' //时间类定义
int main()
{
时间t;//创建时间对象
//级联函数调用
t.setHour( 18)。setMinute( 30)。setSecond(22);
//省略其余不重要的部分
} //结束main
这里t.setHour的返回值实际上是t,所以获取setMinute的方法同样是t.setMinute,运行t.setHour(18)后。setMinute(30),返回值还是T,可以继续调用setSecond。
那么,这样返回指向对象的类安全吗?注意,这里类是作为一个整体对象返回的,不存在返回类中私有成员地址的情况,所以返回对象地址和返回变量地址本质上是不同的。对象返回后,对象仍然保证私有变量的封装,所以这里不用考虑变量地址带来的安全问题。
感谢您的阅读,希望能帮到您,也感谢您对本站的支持!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。