在 C++ 中执行子对象方法数组

Executing array of child objects methods in C++

提问人:FourierFlux 提问时间:11/15/2023 更新时间:11/15/2023 访问量:48

问:

假设我有一个基类 A 和两个派生类 B 和 C。我想创建一个函数指针数组,该数组由 B 和 C 的虚拟成员组成并执行它们。

我该怎么做?

我真的很想更进一步,甚至不让对象共享父类,但我认为这更容易。

C++ 继承 多态性

评论

0赞 NathanOliver 11/15/2023
听起来你想要的是多态性。您将有一个指向基类的指针数组,这些基类本身指向派生对象,然后使用虚拟函数来“做正确的事”。
0赞 FourierFlux 11/15/2023
你能举个例子吗?我不明白这是怎么回事。
0赞 NathanOliver 11/15/2023
你的 C++ 书应该有一个关于多态性的部分。
0赞 FourierFlux 11/15/2023
我不明白如何将基类指针转换为派生类,这在标准 exples 中没有讨论。
0赞 paddy 11/15/2023
强制转换基类指针。这就是多态性所提供的。虚函数表会自动映射到基础对象的正确覆盖。

答:

1赞 Hugh Granger 11/15/2023 #1

如果您有class A { virtual void f() = 0; };

而类 B 和 C 派生自 A,那么你可以做

using memfuncptr = void(A::*)();
memfuncptr memfuncs[] {&B::f};
A a;
a.*(memfuncs[0]);

这确实要求所有所需的成员函数都是 A 的成员。

评论

1赞 paddy 11/15/2023
请考虑将示例更新为编译时不会出错的有效代码。它存在多个问题。
0赞 Hugh Granger 11/15/2023
我包括了指向成员函数的指针的语法。如果定义了类 B 和 C,并且包括 f(),则代码应编译。不幸的是,我在手机上,完整的答案是不切实际的。