C++ 怎么把一个类的对象函数内嵌到另一个类
时间: 2024-05-01 21:20:42 浏览: 18
在 C 语言中,没有类的概念,但可以使用结构体来模拟类的功能。如果想要在一个结构体中嵌入另一个结构体的成员函数,可以使用函数指针。具体来说,可以在一个结构体中定义一个指向另一个结构体成员函数的函数指针,然后在需要调用这个函数的地方通过函数指针来调用。
例如,假设有两个结构体分别为 `struct A` 和 `struct B`,其中 `struct B` 中有一个成员函数 `func()`,想要将它嵌入到 `struct A` 中。可以在 `struct A` 中定义一个函数指针 `func_ptr`,然后在需要调用 `func()` 的地方通过 `func_ptr` 来调用。
示例代码如下:
```
// 定义结构体 B
struct B {
int x;
void (*func)(struct B *self);
};
// 定义结构体 A
struct A {
int y;
struct B b;
void (*call_func)(struct A *self);
};
// B 的成员函数
void func(struct B *self) {
printf("x = %d\n", self -> x);
}
// A 的成员函数
void call_func(struct A *self) {
self -> b.func(&(self -> b));
}
int main() {
// 初始化结构体 B
struct B b = {10, func};
// 初始化结构体 A
struct A a = {20, b, call_func};
// 调用函数
a.call_func(&a);
return 0;
}
```
在上面的代码中,`struct A` 中的成员变量 `b` 是一个 `struct B` 类型的结构体,其中包含了一个函数指针 `func`,指向 `struct B` 中的成员函数 `func()`。同时,`struct A` 中还定义了一个成员函数 `call_func()`,用于调用 `struct B` 中的成员函数 `func()`。在 `call_func()` 中,通过 `self -> b.func(&(self -> b))` 调用了 `func()` 函数。
运行上面的代码,输出结果为:
```
x = 10
```
可以看到,成功地将 `struct B` 中的成员函数嵌入到了 `struct A` 中,并且调用成功。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![text/x-c++](https://img-home.csdnimg.cn/images/20210720083646.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)
![](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)