C++可以把类内的public函数赋值给非类成员的函数指针吗
时间: 2023-08-02 08:06:16 浏览: 45
可以的,可以使用类名加作用域运算符 `::` 来访问类内的公有成员函数,然后将其赋值给非类成员的函数指针。
例如,假设有一个名为 `MyClass` 的类,其中有一个公有成员函数 `publicFunc()`,我们可以将其赋值给一个函数指针 `void (*fp)()`,代码如下:
```cpp
class MyClass {
public:
void publicFunc() {
// 类内的公有成员函数
}
};
void (*fp)() = &MyClass::publicFunc; // 将类内的公有成员函数赋值给函数指针
```
这样,我们就可以通过函数指针来调用类内的公有成员函数了。注意,如果是非静态成员函数,需要先创建一个类的实例对象,才能调用该函数。
相关问题
C++中的非类成员的静态函数例子
以下是一个简单的非类成员的静态函数例子:
```cpp
#include <iostream>
static void printMessage() {
std::cout << "Hello, World!" << std::endl;
}
int main() {
printMessage();
return 0;
}
```
在这个例子中,`printMessage` 函数是一个非类成员的静态函数,它被定义为 `static`,以便只能在当前文件中使用。它不属于任何类,因此可以直接调用它,而无需创建任何对象。在 `main` 函数中,我们直接调用 `printMessage` 函数来输出消息。
需要注意的是,如果将 `static` 关键字从 `printMessage` 函数中删除,则该函数将变为非静态函数,此时它需要通过对象来调用。
c++运算符重载成员函数和友元函数引用
C++运算符重载可以通过成员函数和友元函数两种方式实现。其中,成员函数重载运算符是将运算符重载为类的成员函数,而友元函数重载运算符是将运算符重载为非类的成员函数。
成员函数重载运算符的语法格式如下:
```cpp
返回类型 operator 运算符(参数列表) {
// 函数体
}
```
例如,将运算符“+”重载为my_string类的成员函数:
```cpp
class my_string {
public:
my_string operator+(const my_string& str) {
my_string result;
// 实现字符串拼接
return result;
}
};
```
而友元函数重载运算符的语法格式如下:
```cpp
friend 返回类型 operator 运算符(参数列表);```
例如,将运算符“+”重载为非my_string类的友元函数:
```cpp
class my_string {
public:
friend my_string operator+(const my_string& str1, const my_string& str2) {
my_string result;
// 实现字符串拼接
return result;
}
};
```
需要注意的是,成员函数重载运算符只能重载部分运算符,例如“+”、“-”、“*”、“/”等,而不能重载赋值运算符“=”和下标运算符“[]”;而友元函数重载运算符可以重载所有运算符。