C++中的this指针的使用方法,有哪位高手清楚的吗?

#include<iostream>
#include<string>
using namespace std;
class Human
{
private:
void Talk(string Statement)
{
cout<<Statement<<endl;
}
public:
void Introduceself()
{
Talk("this,Bla bla");
}
};

int main()
{
Human whw;
whw.Introduceself ();
return 0;
}

其中的这句话Talk("this,Bla bla");通不过编译啊!
书上说:在类的成员方法中调用其他方法时,编译器将隐式的传递This指针(函数调用中不可见的参数)
在这里,方法Introduceself()使用私有成员Talk()在屏幕上显示一句话。实际上编译器将在调用Talk时嵌入this指针,即Talk(this,"Bla bla")

哪位高手知道怎么做啊?如果你说把Talk(this,"Bla bla")改成 this->Talk("Bla bla");就不要回答了。因为我要的是专业的回答!!!
谢谢了!

this指针实际上是每个非static成员函数的隐式参数,指向调用该函数的对象,编译器在调用该函数的每个地方自动传递当前对象的地址给该参数。

如果你写过C语言操作结构体的函数代码的话,你应该知道一般这种函数的第一个参数应该是该结构体变量的指针,该指针用于访问结构体变量中的成员,而且调用该函数的时候还要传递结构体变量的地址。这种指针相当于C++的this,只不过在C++里,编译器替你做。

所以main函数的语句经过编译器处理时会变成如下:
int main() {
Human whw;
Human::Introduceself( &whw ); // &whw 就等于 == this 了。

}
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-10-22

书上说的是:实际上【编译器】将在调用Talk时嵌入this指针,即Talk(this,"Bla bla"), 。。。。

就是,上面的代码,【编译器】在编译的时候,实际上把你的代码修改如下,然后再编译的。

class Human
{
private:
    void Talk(Human* const p, string Statement) // p = this
    {
        cout<<Statement<<endl;
    }
public:
    void Introduceself(Human* const p) //p = this
    {
        p->Talk(this, "this,Bla bla");
    }
};

而调用的源码,自然也修改成了:

int main(int argc, char** argv) {
    Human whw;
    whw.Introduceself (&whw); // this传入
    return 0;
}

【并不是让你在源码上的函数调用接口自己嵌入this】

本回答被提问者采纳
第2个回答  2014-10-22
不太明白你的意思
Talk("this,Bla bla");是能编译通过的啊

这个this指针只是为了告诉系统调用函数或者属性的位置,说白了就是这个类的地址

不知道你有没有研究过函数指针
第3个回答  2014-10-22
Talk("Bla bla")嵌入this的意思应该是this->Talk("Bla bla");而不是Talk(this,"Bla bla"),很明显的事,函数要this指针有什么用?不可能拿它来做参数。
第4个回答  2014-10-22
Talk(string Statement)
Talk(const char *)

C++this指针用法参考
总结,this指针在C++中用于在成员函数中引用当前对象。理解其用法对于掌握面向对象编程至关重要。通过成员函数传递类指针作为this参数,使得成员函数可以直接访问类的私有数据。理解this指针的生命周期和存储方式,有助于更高效地编写C++代码。

谁能告诉我,C语言中的this指针的具体详细的定义和使用?
2. this指针的使用:一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;另外一种情况是当参数与成员变量名相同时,如this->n = n (不能写成n = n)。

C++中的this指针
在C++中,this指针是实现对象自引用的核心机制,它指向当前对象的地址。成员函数通过this访问类的成员,确保了函数能够识别调用它的对象,并访问其成员。编译器在编译时自动处理this指针。1. 常规用法 常用场景包括自引用指针、链式调用、返回对象自身引用以及成员访问等。链式调用通过返回*this实现连续调用同一...

c++中this的用法?
this 指针是当前对象的引用,做为其成员函数的隐藏参数存在.只要对成员操作的地方都隐含this 指针.比如函数int GetValue{return itsValue;}实际上就是return this->itsValue.理解到这步就行了.

c++中的this指针详解!
C++中的this指针深入解析:在C++中,类本质上是一种自定义类型,可以用来声明变量,比如`myclass my`,这里的`this`就类似于一个指向变量自身的指针。每个实例的`this`都是指向该实例在内存中的地址,类型与实例的类相同。在类的非静态成员函数中,`this`作为隐含参数,自动传递了对象的地址,使得我们...

c++ this *this用法?
,说说我的理解吧: 不足之处请高手赐教。this 指针也就是 一个类中的成员函数隐性的指针,由编译器生成的。当成员函数被调用时,this指针指向调用的对象地址。。我不知道你的用法指的是什么,,this指针一般是隐式调用的,如果要显示使用的话,按一般指针 用法不就成了。。我是这么觉得的。。

c++中"this"的用法?
也就是返回a-a,这就有问题了--究竟哪个a是成员变量哪个a又是参数呢?为了搞清楚这一点,我们要把成员变量的那个a变成this->a,而参数a不变.这样就能分清楚了!也就是说,this是一个指向当前要调用成员函数的那个类对象的指针,仔细琢磨琢磨这句话吧!

在C++中,如何显式地使用this指针呢?(具体就是在函数生命中有this指针参...
this指针就是对象地址常量,this关键词的作用域是对象,在对象成员函数被调用时由系统自动传入(隐含操作),对象成员函数可以直接使用,不需要另外传递;如果外部代码需要访问或传递对象地址,直接取得对象地址即可,且外部程序不能使用this关键词。

C++this指针详解
例如,在volume函数中,可以使用this->height、this->width、this->length来明确引用对象的数据成员。此外,也可以使用*this来表示当前对象,*this等同于this所指向的对象。总结来说,this指针是C++中用于区分不同对象成员函数引用的关键元素。通过this指针,成员函数能够访问并操作特定对象的数据成员,实现不...

c++中怎样用this指针输出本对象的名称
可以用typeid(*this).name(),但是这种方法返回的一般是一个数字加上对象名称,而且结果取决于编译器。比如:class A { public:void printClassName() { cout << typeid(*this).name() << endl;} };调用printClassName()在我的gcc上会输出1A 还有一种方法就是在class里定义一个静态成员函数。c...

相似回答