Every object in C++ has access to its own address through an important pointer calledthispointer. Thethispointer is an implicit parameter to all
member functions. Therefore, inside a member function, this may be used to refer to the invoking object.
Friend functions do not have athispointer, because friends are not members of a class. Only member functions have athispointer.
Let us try the following example to understand the concept of this pointer:
#include <iostream>
using namespace std;
class Box
{
public:
// Constructor definition
Box(double l=2.0, double b=2.0, double h=2.0)
{
cout <<"Constructor called." << endl;
length = l;
breadth = b;
height = h;
}
double Volume()
{
return length * breadth * height;
}
int compare(Box box)
{
return this->Volume() > box.Volume();
}
private:
double length; // Length of a box
double breadth; // Breadth of a box
double height; // Height of a box
};
int main(void)
{
Box Box1(3.3, 1.2, 1.5); // Declare box1
Box Box2(8.5, 6.0, 2.0); // Declare box2
if(Box1.compare(Box2))
{
cout << "Box2 is smaller than Box1" <<endl;
}
else
{
cout << "Box2 is equal to or larger than Box1" <<endl;
}
return 0;
}
When the above code is compiled and executed, it produces following result:
Constructor called.
Constructor called.
Box2 is equal to or larger than Box1
|
先要理解class的意思。class应该理解为一种类型,象int,char一样,是用户自定义的类型。(虽然比int char这样build-in类型复杂的多,但首先要理解它们一样是类型)。用这个类型可以来声明一个变量,比如int x, myclass my等等。这样就像变量x具有int类型一样,变量my具有myclass类型。
理解了这个,就好解释this了,my里的this 就是指向my的指针。如果还有一个变量myclass mz,mz的this就是指向mz的指针。 这样就很容易理解this 的类型应该是myclass *,而对其的解引用*this就应该是一个myclass类型的变量。
通常在class定义时要用到类型变量自身时,因为这时候还不知道变量名(为了通用也不可能固定实际的变量名),就用this这样的指针来使用变量自身。
1.this指针的用处:
一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。
例如,调用date.SetMonth(9) <===> SetMonth(&date, 9),this帮助完成了这一转换.
2.this指针的使用:
一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;另外一种情况是当参数与成员变量名相同时,如this->n = n (不能写成n = n)。
3.this指针程序示例:
this指针是存在与类的成员函数中,指向被调用函数所在的类实例的地址。
根据以下程序来说明this指针
#include<iostream.h>
class Point
{
int x, y;
public:
Point(int a, int b) { x=a; y=b;}
Void MovePoint( int a, int b){ x+=a; y+=b;}
Void print(){ cout<<"x="<<x<<"y="<<y<<endl;}
};
void main( )
{
Point point1( 10,10);
point1.MovePoint(2,2);
point1.print( );
}
当对象point1调用MovePoint(2,2)函数时,即将point1对象的地址传递给了this指针。
MovePoint函数的原型应该是 void MovePoint( Point *this, int a, int b);第一个参数是指向该类对象的一个指针,我们在定义成员函数时没看见是因为这个参数在类中是隐含的。这样point1的地址传递给了this,所以在MovePoint函数中便显式的写成:
void MovePoint(int a, int b) { this->x +=a; this-> y+= b;}
即可以知道,point1调用该函数后,也就是point1的数据成员被调用并更新了值。
即该函数过程可写成 point1.x+= a; point1. y + = b;
4.关于this指针的一个精典回答:
当你进入一个房子后,
你可以看见桌子、椅子、地板等,
但是房子你是看不到全貌了。
对于一个类的实例来说,
你可以看到它的成员函数、成员变量,
但是实例本身呢?
this是一个指针,它时时刻刻指向你这个实例本身。
分享到:
相关推荐
### C++中this指针的深入理解与应用 在C++编程中,`this`指针是一个非常重要的概念,它提供了对当前对象的引用,使得成员函数能够访问和操作对象的成员变量。以下是对`this`指针用法的详细解析,包括其基本功能、...
在C++编程语言中,`this`指针是一个非常关键的概念,它在处理类的成员函数时起着至关重要的作用。`this`是一个隐含的指针,它总是指向调用成员函数的对象本身。理解`this`指针的用法和含义对于深入理解面向对象编程...
首先,理解`this`指针的关键在于理解C++中的`class`。`class`是一种用户自定义的数据类型,它可以包含数据成员(变量)和成员函数(方法)。当你声明一个`class`类型的变量,如`MyClass my`,`my`就是一个`MyClass`...
### 详解C++中的this指针 #### 一、引言 在C++编程语言中,`this`指针是一个非常重要的概念,尤其在面向对象编程中扮演着关键角色。`this`指针是一个指向当前对象的指针,它允许程序员在类的成员函数内部引用该对象...
// 使用obj模拟this指针 obj->data_member = some_value; } }; // 使用模拟this的方法 Object obj; Object* ptr_to_obj = &obj; obj.simulateThis(ptr_to_obj); ``` 在这个例子中,`simulateThis`函数接受一个`...
这个压缩包文件包含了关于`this`指针应用的源代码和文档,非常适合那些想要深化对指针理解的初学者。 首先,我们要明白`this`指针的作用。在成员函数内部,`this`关键字被用来引用当前对象的成员变量。例如,如果你...
### C++中的this指针详解 #### 一、引言 在C++编程语言中,`this`指针是一个非常重要的概念,它被广泛应用于成员函数内部,用于指代当前对象本身。相比于C语言,C++引入了面向对象的特性,而`this`指针正是这些...
在C++编程中,`this`指针是一个非常关键的概念,尤其对于理解对象内部的工作机制至关重要。`this`指针是一个隐含的参数,它在每个非静态成员函数中都被传递,指向调用该成员函数的对象。让我们深入探讨`this`指针的...
// 使用this指针访问name成员 } ``` 这里,`this->name`等同于`(*this).name`,表示获取当前对象的`name`属性。 `this`指针在重载运算符时也十分有用。当需要重载一个运算符并使其作用于当前对象时,可以使用`...
对象数组、对象指针和this指针 在 C++ 程序设计中,对象数组和对象指针是两个重要的概念,...对象数组、对象指针和this指针都是 C++ 程序设计中的重要概念,理解它们的使用和特点对于编写高效、可维护的代码非常重要。
要想理解 C++ 的 this 指针,我们先把下面的 C++ 代码转换成 C 的代码 class Car { public: int m_price; // 成员变量 void SetPrice(int p) // 成员函数 { m_price = p; } }; int main() { Car car; car....
**this指针** 是C++中一个非常重要的概念,尤其是在面向对象编程中。对于类的成员函数,this指针允许函数知道它们正在操作哪个对象。 - **含义**:对于每个类的非静态成员函数,都有一个隐含的this指针。这个指针...
在C++编程语言中,模型对象和`this`指针是两个非常重要的概念,它们对于理解和编写复杂的面向对象程序至关重要。...提供的“C++模型对象和this指针”实例教程和源码正是这样的学习资源,值得仔细研究和学习。
总的来说,通过指针实现运算符重载是C++中增强类型功能的一种强大工具。它可以让我们在自定义类上使用熟悉的运算符,提高代码的可读性和效率。理解并掌握这一技术,对于提升C++编程能力至关重要。在实际编程过程中,...
【描述】: "本文深入探讨了C++中的this指针,提供了一种理解this指针工作原理的视角,并解释了它与C++对象模型的关系。" 【标签】: "c++,c,指针" 【正文】: 在C++中,this指针是一个隐含的参数,它在每个非静态...
在这个例子中,“C this指针应用简单一例”展示了如何利用`this`指针来实现对象资源的拷贝。 首先,让我们深入理解`this`指针。在C++中,当定义一个类的成员函数时,编译器会自动为这个函数添加一个隐藏的参数,即`...
`this`在JavaScript中并不像其他静态类型语言(如Java或C++)中的指针那样工作,而是根据函数调用的方式动态确定其值。以下是对`this`指针的详细解释: 1. **全局作用域中的`this`** 在全局作用域中,`this`通常...