C++:this指针

目录

前言

成员函数返回this指向的对象本身时,为什是返回引用类型?

成员函数返回this对象本身时,内部通常会通过拷贝构造函数来创建一个临时对象?

总结


前言

c++通过提供特殊的对象指针,this指针 指向被调用的成员函数所属的对象

  • this指针是隐含每一个非静态成员函数内的一种指针
  • this指针不需要定义,直接使用即可
  • 当形参和成员变量同名时,可用this指针来区分
  • 在类的非静态成员函数中返回对象本身,可使用return *this

成员函数返回this指向的对象本身时,为什是返回引用类型?

类似于 &b=a,修改b同时就是修改a,完全可以把b当做a,b就是a本身,但是如果返回的不是引用,就是 b=a,那就是创造一个新的变量。不能把b当做a用,所以类型去掉引用返回的不是b本身,而是b的副本

当你直接返回一个 Person 对象时,每次调用 PersonAddPerson 函数都会创建一个新的 Person 对象。这是因为函数返回的是一个临时对象(即在函数内部创建的),而不是原对象本身。

在 C++ 中,函数的返回值通常会通过拷贝构造函数(copy constructor)或移动构造函数(move constructor)生成一个临时对象。这样做是为了保证函数返回的对象是有效的且能够被使用。

因此,如果 PersonAddPerson 函数直接返回一个新创建的 Person 对象,每次调用函数时都会生成一个临时对象。这样的设计可能会引入额外的资源开销,包括内存分配和对象构造等。

如果你希望在原对象上进行修改而不是返回新对象,你可以使用引用类型作为函数的返回类型。通过返回引用类型,函数可以直接操作并修改原对象。这样可以避免创建新对象和资源开销。

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


class Person
{
public:

	Person(int age)
	{
		// 1、当形参和成员变量同名时,可用this指针来区分
		this->age = age; // this->成员,类似结构体指针访问成员
	}

	Person& PersonAddPerson(Person p)
	{
		this->age += p.age;
		return *this; // 返回对象本身
	}

	int age;
};

void test01()
{
	Person p1(10);
	cout << "p1.age = " << p1.age << endl; // 10

	Person p2(10);
	/* 链式调用,第一次得到20,返回p2本身,再继续调用,最终加两次得到40(如果返回的是Person类型,这里得到的是20)*/
	p2.PersonAddPerson(p1).PersonAddPerson(p1).PersonAddPerson(p1);
	cout << "p2.age = " << p2.age << endl; // 40
}

int main() {

	test01();

	return 0;
}

成员函数返回this对象本身时,内部通常会通过拷贝构造函数来创建一个临时对象?

当一个函数返回一个对象时,编译器会使用拷贝构造函数来生成该返回对象的副本。拷贝构造函数是一个特殊的类成员函数,用于将一个对象的数据成员的值复制到另一个对象中。

假设我们有一个简单的类 Person,具有一个 name 字符串成员变量:

cpp 复制代码
		class Person {
		public:
			std::string name;
			Person(const std::string& n) : name(n) {}
			// 拷贝构造函数
			Person(const Person& other) : name(other.name) {}
		};
		// 现在,我们有一个函数 getPerson(),它返回一个 Person 对象:
		Person getPerson() {
			Person p("Alice");
			return p;
		}

在这个例子中,当 getPerson() 函数被调用时,它会创建一个 Person 对象 p,并将其初始化为 "Alice"。然后,函数将返回 p。

在返回的过程中,编译器会使用拷贝构造函数来生成返回对象 p 的副本。这意味着在调用 getPerson() 后,将会创建一个新的 Person 对象,其中的 name 字符串值被复制为 "Alice"。这是因为我们不能直接返回函数内部的局部对象 p,因为它是在函数结束后将被销毁的。

因此,拷贝构造函数在这里的作用是在函数返回对象时,根据已有对象的值创建一个新的对象,确保返回的对象是有效且具有正确的值。

总结

this指针是一个特殊的指针,用于访问当前对象的成员。它提供了一种便捷的方式来引用当前对象的成员变量和成员函数,并解决名称冲突的问题。

相关推荐
暮色_年华6 分钟前
Modern Effective C++ Item 11:优先考虑使用deleted函数而非使用未定义的私有声明
c++
流星白龙9 分钟前
【C++习题】10.反转字符串中的单词 lll
开发语言·c++
尘浮生16 分钟前
Java项目实战II基于微信小程序的校运会管理系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
MessiGo16 分钟前
Python 爬虫 (1)基础 | 基础操作
开发语言·python
Tech Synapse22 分钟前
Java根据前端返回的字段名进行查询数据的方法
java·开发语言·后端
乌啼霜满天24930 分钟前
JDBC编程---Java
java·开发语言·sql
Smile丶凉轩31 分钟前
微服务即时通讯系统的实现(服务端)----(1)
c++·git·微服务·github
色空大师43 分钟前
23种设计模式
java·开发语言·设计模式
萝卜兽编程1 小时前
优先级队列
c++·算法
Bruce小鬼1 小时前
QT文件基本操作
开发语言·qt