C++:遍历对象以调用相同的方法

标签 c++ oop object foreach iteration

在 C++ 中,假设您有一大堆要调用相同方法的对象。

Alice->callSameMethod();
Bob->callSameMethod();
...
Yoyo->callSameMethod();

但是从 Alice 到 Yoyo 键入同一行很麻烦。有没有办法做这样的事情:

For (each x in {Alice,Bob, ..., Yoyo}) x->callSameMethod;

我在这里看到了 for_each:http://www.cplusplus.com/reference/algorithm/for_each/ 但没看懂。

最佳答案

例子:

class Base{public: virtual int callSameMethod() = 0;};
           //pure virtual, can make it a default implementation
class Alice: public Base {public: int callSameMethod();...}; // own implementation
class Bob: public Base {public: int callSameMethod();...}; // own implementation
class YoYo: public Base{public: int callSameMethod();...}; // own implementation

代码中的某处:

Base* p1 = new Alice();
Base* p2 = new Bob();

std::vector<Base*> v;
std::vector<Base*>::iterator it;
v.push_back(p1);
v.push_back(p2);
for (it = v.begin(); it != v.end(); it++) (*it)->callSameMethod();

这称为“多态性”,您的基类定义了一个公共(public)接口(interface),您可以通过该接口(interface)调用任何衍生产品而无需知道它们到底是哪一种。您可以使用 std::for_each 而不是简单的循环,或者使用带索引访问的 vector 而不是迭代器,无论您喜欢什么。

关于C++:遍历对象以调用相同的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9961329/

相关文章:

c# - 通过TCP套接字将图像从C#服务器发送到Java客户端

java - JVM 创建 CSV 文件并即时压缩所需的内存

c++ - cmake:设置多个项目和它们之间的依赖关系

c++ - 分配更多内存会减慢操作速度?

c++ - 为什么它不能正确解析 XML 文件?

c++ - pugixml 与 tinyxml

python - 类型错误 : It would appear that nargs is set to conflict with the composite type arity

Perl,Moose - 子类不继承父类(super class)的方法

oop - 编写健壮的 "modern"Fortran 代码

javascript - 将变量存储在数组中(充当对象中的值) JavaScript