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/ 但是不明白.
例:
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
带索引的访问而不是迭代器,无论您喜欢什么.