类的成员函数都有this指针
时间: 2023-06-27 22:06:33 浏览: 58
是的,类的成员函数都有一个隐含的指向当前对象的指针,即this指针。this指针是一个指针常量,它指向当前对象,用于在类的成员函数中访问当前对象的成员变量和成员函数。this指针可以在成员函数内部使用,也可以在类的外部使用,但必须保证在使用前已经创建了对象。当我们调用一个成员函数时,编译器会自动将当前对象的地址作为this指针传递给函数。例如:
```c++
class Person {
public:
void setName(string name) {
this->name = name; // 使用this指针访问当前对象的成员变量
}
private:
string name;
};
int main() {
Person p;
p.setName("Tom"); // 调用setName函数时,编译器会自动传递当前对象的地址给函数,此时this指针指向p对象
return 0;
}
```
相关问题
什么时候调用class类成员函数要用到this指针
在类的成员函数中,如果要访问成员变量或者调用其他成员函数,就需要使用this指针。this指针指向当前对象,通过它可以访问对象的成员变量和成员函数。在成员函数内部,可以使用this指针来区分形参和成员变量名相同的情况,以及在函数调用时明确指定是哪个对象的成员函数被调用。一般情况下,在类的成员函数中,如果涉及到访问成员变量或者调用其他成员函数,就需要使用this指针。
类成员函数做函数指针
回答: 类成员函数指针是指向类的非静态成员函数的指针。在使用类成员函数指针时,需要使用类对象或者指针来调用指针所指的成员函数。这是因为非静态的成员函数必须被绑定到一个类的对象或者指针上,才能得到被调用对象的this指针,然后才能调用指针所指的成员函数。在C语言中,直接使用类成员函数指针会报错,需要注意使用方法的区别。类成员函数指针是有真正的内存地址的,这个地址一般跟具体的类对象没有什么关系,因为类被需要的时候会被载入内存,类成员函数也会被载入内存。下面是一个示例代码,演示了类成员函数指针的使用方法:
```cpp
#include <iostream>
using namespace std;
class CT {
public:
void func(int tmp) {
cout << "func()普通函数, tmp = " << tmp << endl;
}
virtual void virtualfunc(int tmp) {
cout << "virtualfunc()虚函数, tmp = " << tmp << endl;
}
static void staticfunc(int tmp) {
cout << "staticfunc()静态成员函数, tmp = " << tmp << endl;
}
};
int main() {
CT ct;
CT* pct = &ct;
void (CT::*func_pointer)(int); // 一个类成员函数指针变量的定义
func_pointer = &CT::func;
(ct.*func_pointer)(100); // 使用类对象来调用类成员函数指针指向的成员函数
(pct->*func_pointer)(100); // 使用类指针来调用类成员函数指针指向的成员函数
return 0;
}
```
在上述示例代码中,定义了一个类CT,其中包含了一个普通成员函数func、一个虚函数virtualfunc和一个静态成员函数staticfunc。主函数中定义了一个类对象ct和一个类指针pct,并声明了一个类成员函数指针变量func_pointer,将其指向func函数。接着使用类对象和类指针来调用func指向的成员函数。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [C++类成员函数指针使用介绍](https://blog.csdn.net/luoyayun361/article/details/101109522)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"]
- *3* [类成员函数指针](https://blog.csdn.net/A_With_better/article/details/123079792)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]