【C++】5___this指针

目录

一、this指针

二、空指针访问成员函数

三、const修饰成员函数


一、this指针

this指针指向被调用的成员函数所属的对象
作用

  • 形参和成员变量同名时,可以用this指针来区分
  • 在类的非静态成员函数中返回对象本身,可使用return *this

代码示例

cpp 复制代码
#include<iostream>
using namespace std;

class person{
	
public:
	
	person(int age){
		this->age = age; //解决名称冲突
	}
	
	person& personAddAge(person &p){
		this->age += p.age; 
		return *this;
	}
	
	int age;
};

void test(){
	person P1(10);
	cout<<"P1.age="<<P1.age<<endl;
	
}

void test2(){
	person p1(10);
	
	person p2(10);
	p2.personAddAge(p1).personAddAge(p1).personAddAge(p1);
	cout<<"p2.age="<<p2.age<<endl;	
}

int main(){
	
	test();
	test2();
	return 0;
}

二、空指针访问成员函数

空指针也可以调用成员函数,但要注意有没有用到this指针

代码示例

cpp 复制代码
#include<iostream>
using namespace std;

class person{
	
public:
	
	void fun(){
		cout<<"fun函数调用"<<endl;
	}
	
	void fun2(){
		if(this == NULL){  // 保证代码健壮性
			return;
		}
		//  报错原因是传入了空指针
		cout<<"age="<<age<<endl;  // age  ===  this->age
	}
	int age;
};

void test(){
	person *p = NULL;
	p->fun();  // 可以调用
	p->fun2();  // 错误
	
}

int main(){
	
	test();
	return 0;
}

三、const修饰成员函数

  • 常函数
  1. 成员函数后加const 变为常函数
  2. 函数内不可修改成员属性
  3. 成员属性声明是在前面加上mutable后,在常函数中依然可以修改
  • 常对象
  1. 声明对象前加const,称为常对象
  2. 常对象只能调用常函数

代码示例

cpp 复制代码
#include<iostream>
using namespace std;

class person{
	
public:
	// 常函数
	void fun() const {  // 在成员函数后面加const,修饰的是this指向,让指针指向的值也不可以修改
//		age = 10; // 错误,this指针的本质  是指针常量,指针的指向是不可以修改的
	b = 10;
	}
	
	int age;
	mutable int b; // 特殊变量,即使在常函数中也可以修改。加关键字mutable
};

int main(){
	return 0;
}
相关推荐
luckys.one3 小时前
第9篇:Freqtrade量化交易之config.json 基础入门与初始化
javascript·数据库·python·mysql·算法·json·区块链
~|Bernard|5 小时前
在 PyCharm 里怎么“点鼠标”完成指令同样的运行操作
算法·conda
战术摸鱼大师5 小时前
电机控制(四)-级联PID控制器与参数整定(MATLAB&Simulink)
算法·matlab·运动控制·电机控制
Christo35 小时前
TFS-2018《On the convergence of the sparse possibilistic c-means algorithm》
人工智能·算法·机器学习·数据挖掘
好家伙VCC6 小时前
数学建模模型 全网最全 数学建模常见算法汇总 含代码分析讲解
大数据·嵌入式硬件·算法·数学建模
利刃大大7 小时前
【高并发内存池】五、页缓存的设计
c++·缓存·项目·内存池
C语言小火车7 小时前
【C++八股文】基础知识篇
c++·tcp/ip·const·智能指针·多线程同步·static关键字·c++内存模型
liulilittle7 小时前
IP校验和算法:从网络协议到SIMD深度优化
网络·c++·网络协议·tcp/ip·算法·ip·通信
眠りたいです8 小时前
基于脚手架微服务的视频点播系统-播放控制部分
c++·qt·ui·微服务·云原生·架构·播放器
Want5958 小时前
C/C++圣诞树①
c语言·开发语言·c++