在 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/