类成员函数名取地址和不取的区别
时间: 2023-08-10 13:12:36 浏览: 85
成员函数名取地址和不取的区别在于,取地址会得到该成员函数在内存中的地址,而不取地址则直接调用该成员函数。取地址通常用于函数指针、回调函数等场景中,而不取地址则通常用于直接调用成员函数的场景中。
例如,以下代码演示了成员函数名取地址的用法:
```
class MyClass {
public:
void myFunc() {}
};
int main() {
MyClass obj;
void (MyClass::*ptr)() = &MyClass::myFunc; // 取地址
(obj.*ptr)(); // 调用成员函数
return 0;
}
```
在上述代码中,将 `MyClass::myFunc` 的地址存储在 `ptr` 中,并通过 `obj.*ptr` 调用了该成员函数。
而如果不取地址,则可以直接调用成员函数,例如:
```
class MyClass {
public:
void myFunc() {}
};
int main() {
MyClass obj;
obj.myFunc(); // 直接调用成员函数
return 0;
}
```
因此,成员函数名取地址和不取的区别在于使用场景不同。
相关问题
c++ 中为类重载运算符时成员函数和全局函数的区别
在C++中,重载运算符可以作为成员函数或全局函数来定义。下面是成员函数和全局函数在类重载运算符时的区别。
1. 形式:
成员函数:重载运算符作为类的成员函数被定义,使用类的实例调用。
全局函数:重载运算符作为类外的全局函数被定义,使用运算符符号作为函数名进行调用。
2. 参数:
成员函数:作为成员函数时,重载运算符有一个参数(除了一元运算符,如++, --等)表示运算符的右操作数。左操作数是调用该成员函数的类的实例。
全局函数:作为全局函数时,重载运算符通常有两个参数,分别表示运算符的两个操作数。
3. 实现位置:
成员函数:重载运算符作为类的成员函数实现,因此可以使用类的私有成员变量和保护成员函数。
全局函数:重载运算符作为全局函数时,不能直接访问类的私有成员变量和保护成员函数,需要通过类的公有接口来实现对类的访问。
4. 对称性:
成员函数:由于成员函数将调用者作为左操作数,因此成员函数的操作数的顺序是固定的。例如,对于一个重载的加法运算符,如果a是类的实例,则a.operator+(b)或a+b是可以的,但b.operator+(a)是不行的。
全局函数:全局函数没有这种对称性的问题,因为它不依赖于特定的对象来调用。
综上所述,成员函数和全局函数在类重载运算符时的区别在于形式、参数、实现位置和对称性。选择使用成员函数还是全局函数取决于具体的需求和设计选择。
c++取地址操作符函数
在C++中,取地址操作符函数是一个重载运算符,它使用符号&来实现。取地址操作符函数的作用是返回一个指向操作数地址的指针。
下面是一个使用取地址操作符函数的示例:
```c++
#include <iostream>
using namespace std;
class MyClass {
int x, y;
public:
MyClass(int a, int b) {
x = a;
y = b;
}
int* operator & () {
return &x;
}
};
int main() {
MyClass obj(10, 20);
int* ptr = &obj;
cout << *ptr << endl;
return 0;
}
```
在这个示例中,MyClass类定义了一个取地址操作符函数,它返回对象的x成员的地址。在主函数中,我们创建了一个MyClass对象并使用取地址操作符函数获取了它的x成员的地址,并将其存储在一个指针变量中。然后我们打印了指针指向的值,即10。
需要注意的是,取地址操作符函数必须是一个非静态成员函数,并且不能有参数。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)