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

hol*_*ow7 2 c++ oop iteration foreach object

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

Alice->callSameMethod();
Bob->callSameMethod();
...
Yoyo->callSameMethod();
Run Code Online (Sandbox Code Playgroud)

但是从Alice到Yoyo输入同样的线路很麻烦.有没有办法做这样的事情:

For (each x in {Alice,Bob, ..., Yoyo}) x->callSameMethod;
Run Code Online (Sandbox Code Playgroud)

我在这里看到了for_each:http://www.cplusplus.com/reference/algorithm/for_each/ 但是不明白.

lit*_*adv 5

例:

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
Run Code Online (Sandbox Code Playgroud)

代码中的某个地方:

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();
Run Code Online (Sandbox Code Playgroud)

这称为"多态",您的基类定义了一个公共接口,您可以通过该接口调用任何衍生物,而无需知道它们究竟属于哪种类型.您可以使用std::for_each而不是简单的循环,或使用vector带索引的访问而不是迭代器,无论您喜欢什么.