使用来自父类的子方法
Use child method from the parent class c++
事情是这样的。想象一下下面的场景。将文件加载到我想要的算法层后能够应用4种不同的算法。算法类有4个子类我想这样做:
int main(int argc, char* argv[]) {
Data *data = new Data();
Parent *alg = new Parent(data);
alg->start();
//and this will call the start methods defined in each child.
}
孩子们是这样的:
class Child1: public Parent {
public:
int start();
}
class Child2: public Parent {
public:
int start();
}
//etc...
我在Parents start()方法中做的是:
int Parent::start() {
Child1::start();
Child2::start();
//etc....
return 0;
}
但我得到一个'不能调用成员函数'Child1::start()'等。没有对象。这件事有办法解决吗?从父类调用子方法?
看看"四人帮"复合模式:
子类不应该从父类派生。相反,子类和父类应该实现相同的接口,我们叫它IAlgorithm
。这个接口应该有一个纯virtual
方法start()
…
下面是一个示例(使用c++ 11 auto
和基于范围的for循环):
#include <iostream>
#include <vector>
/* parents and children implement this interface*/
class IAlgorithm {
public:
virtual int start() = 0;
};
class Parent : public IAlgorithm {
private:
std::vector<IAlgorithm*> children;
public:
void addChild(IAlgorithm* child) {
children.push_back(child);
}
int start() {
std::cout << "parent" << std::endl;
for (auto child: children)
child->start();
return 0;
}
};
class Child1 : public IAlgorithm {
public:
int start() {
std::cout << "child 1" << std::endl;
return 1;
}
};
class Child2 : public IAlgorithm {
public:
int start() {
std::cout << "child 2" << std::endl;
return 2;
}
};
class Child3 : public IAlgorithm {
public:
int start() {
std::cout << "child 3" << std::endl;
return 3;
}
};
int main()
{
Parent parent;
Child1 child_1;
Child2 child_2;
Child3 child_3;
parent.addChild(&child_1);
parent.addChild(&child_2);
parent.addChild(&child_3);
parent.start();
return 0;
}
输出:parent
child1
child2
child3
父类通常不能调用子类方法。在本例中,您已经将类创建为父类型,因此在子类型中调用某些东西是相当危险的,因为子类型可能会假定存在父类型中没有的成员方法或变量。
相关文章:
- 从父类方法返回子类对象
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- Arduino在子类中使用父类方法
- 将"this"从父类方法转换为子类方法是一种好的做法吗?
- 从C++中的父类实例访问子类方法
- 有没有更好的方法可以从子类访问父类的变量?
- 从 C++ 中的子类调用重载父类的方法
- 子类中的方法不会被父类中的虚函数调用
- C++父类,在2个不同的子类中实现了虚拟方法
- 将子类作为父类传递给方法
- 如何使父类的模板方法在子类中可见?
- 在C++中,如何从父类变量的子类调用重载方法
- 指向方法父参数c++的子类方法指针
- 函数调用父类方法而不是子类方法
- C++有没有一种方法可以模拟子类和父类之间的并集行为
- C++父类,调用子类中的方法,调用父类方法
- 如何调用父类类型列表的子类的方法?C++
- c++虚方法:必须在父类中为父类和子类不共享的每个方法创建一个虚方法吗?
- 给父类指针调用子类的方法
- 使用来自父类的子方法