在VC++中this->的用法?为什么很多时候要加this->呢?
答案:5 悬赏:80 手机版
解决时间 2021-01-20 14:30
- 提问者网友:刺鸟
- 2021-01-20 08:25
在VC++中this->的用法?为什么很多时候要加this->呢?
最佳答案
- 五星知识达人网友:千杯敬自由
- 2021-01-20 09:56
this指针是一个隐含于每一个成员函数中的特殊指针。它是一个指向正在被该成员函数操作的对象,也就是要操作该成员函数的对象。
当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含作用this指针。而通常不去显式地使用this指针来引用数据成员。同样也可以使用*this来标识调用该成员函数的对象。下面举一例子说明this指针的应用。
#include
class A
{
public:
A() { a=b=0; }
A(int a, int b) { this.a=a; this.b=b; }
void copy(A &aa); //对象引用作函数参数
void print() {cout int a, b;
};
void A::copy(A &aa)
{
if (this == &aa) return; //这个this是操作该成员函数的对象的地址,在这里是对象a1的地址
*this = aa; //*this是操作该成员函数的对象,在这里是对象a1。
//此语句是对象aa赋给a1,也就是aa具有的数据成员的值赋给a1的数据成员
}
void main()
{
A a1, a2(3, 4);
a1.copy(a2);
a1.print();
}
运行结果:
3, 4
当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含作用this指针。而通常不去显式地使用this指针来引用数据成员。同样也可以使用*this来标识调用该成员函数的对象。下面举一例子说明this指针的应用。
#include
class A
{
public:
A() { a=b=0; }
A(int a, int b) { this.a=a; this.b=b; }
void copy(A &aa); //对象引用作函数参数
void print() {cout
};
void A::copy(A &aa)
{
if (this == &aa) return; //这个this是操作该成员函数的对象的地址,在这里是对象a1的地址
*this = aa; //*this是操作该成员函数的对象,在这里是对象a1。
//此语句是对象aa赋给a1,也就是aa具有的数据成员的值赋给a1的数据成员
}
void main()
{
A a1, a2(3, 4);
a1.copy(a2);
a1.print();
}
运行结果:
3, 4
全部回答
- 1楼网友:等灯
- 2021-01-20 14:52
this表示当前对象的指针,这是由操作系统的内存组织结构决定的。所以类的成员函数单独放在一片区域,调用的时候第一个参数就是对象指针,传入其成员函数。
- 2楼网友:未来江山和你
- 2021-01-20 13:23
LS的说得很多了,不过还有一个漏了
对于记忆不好的人,经常会忘了一些函数名什么的,利用VC的自动完成
输入this->
就会自动弹出本类函数列表和成员,这样做与不写this->没有区别,但却方便很多
对于记忆不好的人,经常会忘了一些函数名什么的,利用VC的自动完成
输入this->
就会自动弹出本类函数列表和成员,这样做与不写this->没有区别,但却方便很多
- 3楼网友:神也偏爱
- 2021-01-20 12:47
用this指针获得当前对象的地址嘛 ,和其他指针一样 ,只不过它是指向特定对象已经命名好了的指针而已。
- 4楼网友:鱼忧
- 2021-01-20 11:29
this指针是一个隐含于每一个成员函数中的特殊指针。它是一个指向正在被该成员函数操作的对象,也就是要操作该成员函数的对象。
当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含作用this指针。而通常不去显式地使用this指针来引用数据成员。同样也可以使用*this来标识调用该成员函数的对象。下面举一例子说明this指针的应用。
#include
class A
{
public:
A() { a=b=0; }
A(int a, int b) { this.a=a; this.b=b; }
void copy(A &aa); //对象引用作函数参数
void print() {cout< private:
int a, b;
};
void A::copy(A &aa)
{
if (this == &aa) return; //这个this是操作该成员函数的对象的地址,在这里是对象a1的地址
*this = aa; //*this是操作该成员函数的对象,在这里是对象a1。
//此语句是对象aa赋给a1,也就是aa具有的数据成员的值赋给a1的数据成员
}
void main()
{
A a1, a2(3, 4);
a1.copy(a2);
a1.print();
}
运行结果:
3, 4
当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含作用this指针。而通常不去显式地使用this指针来引用数据成员。同样也可以使用*this来标识调用该成员函数的对象。下面举一例子说明this指针的应用。
#include
class A
{
public:
A() { a=b=0; }
A(int a, int b) { this.a=a; this.b=b; }
void copy(A &aa); //对象引用作函数参数
void print() {cout< private:
int a, b;
};
void A::copy(A &aa)
{
if (this == &aa) return; //这个this是操作该成员函数的对象的地址,在这里是对象a1的地址
*this = aa; //*this是操作该成员函数的对象,在这里是对象a1。
//此语句是对象aa赋给a1,也就是aa具有的数据成员的值赋给a1的数据成员
}
void main()
{
A a1, a2(3, 4);
a1.copy(a2);
a1.print();
}
运行结果:
3, 4
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯