C++可以把类内的public函数赋值给公共变量的函数指针吗
时间: 2023-08-02 16:06:16 浏览: 45
是的,C++可以把类内的public函数赋值给公共变量的函数指针。如果一个类内的public函数需要作为函数指针来使用,在类的定义中可以声明一个public函数指针类型的成员变量,然后在类的构造函数中把该成员变量赋值为类内的public函数,例如:
```
class MyClass {
public:
typedef void (MyClass::*FuncPtr)();
FuncPtr ptr;
void myFunc() {
// do something
}
MyClass() {
ptr = &MyClass::myFunc;
}
};
```
在这个例子中,`FuncPtr`是一个指向`MyClass`类中没有参数并返回`void`类型的成员函数指针类型,`ptr`是一个`FuncPtr`类型的公共变量,`MyClass`类中的`myFunc`函数被赋值给了`ptr`变量。
相关问题
C++类成员变量为一个函数指针
在C++中,类成员变量可以是一个函数指针。这通常用于实现回调函数或将函数作为参数传递给其他函数。下面是一个简单的例子:
```
class MyClass {
public:
void (*myFuncPtr)(int); // 函数指针成员变量
void callMyFuncPtr(int arg) {
if (myFuncPtr != nullptr) {
myFuncPtr(arg);
}
}
};
void myFunc(int arg) {
std::cout << "myFunc called with arg: " << arg << std::endl;
}
int main() {
MyClass obj;
obj.myFuncPtr = myFunc;
obj.callMyFuncPtr(123);
return 0;
}
```
在这个例子中,`MyClass`类有一个名为`myFuncPtr`的函数指针成员变量。`callMyFuncPtr`方法可以调用该函数指针,并将一个整数参数传递给它。在`main`函数中,我们创建了一个`MyClass`对象,并将`myFunc`函数的地址赋值给`myFuncPtr`成员变量。最后,我们调用`callMyFuncPtr`方法,传递参数`123`,将会执行`myFunc`函数并输出`myFunc called with arg: 123`。
c++ 一个类里面成员变量是另一个类指针时候 构造函数咋初始化
在 C++ 中,一个类里面的成员变量可以是另一个类的指针。在构造函数中,需要将这个指针初始化为指向另一个类的实例。
假设有两个类 A 和 B,其中类 A 包含一个指向类 B 的指针成员变量,代码如下:
```
class B {
// ...
};
class A {
public:
A(); // 构造函数声明
private:
B* b_ptr; // 指向类 B 的指针成员变量
};
```
在 A 的构造函数中,需要将成员变量 b_ptr 初始化为指向 B 的实例。可以使用 new 运算符在堆上创建 B 的实例,并将指针赋值给 b_ptr:
```
A::A() {
b_ptr = new B(); // 初始化 b_ptr 指向 B 的实例
}
```
需要注意的是,在类 A 的析构函数中需要释放堆上分配的 B 实例,代码如下:
```
A::~A() {
delete b_ptr; // 释放堆上分配的 B 实例
}
```
这样可以避免内存泄漏的问题。