使用 parent class c++ 中的 child 方法
Use child method from the parent class c++
这是交易。想象一下你的如下波纹管。
将文件加载到我想要的算法层后
能够应用4种不同的算法。所以算法 class 有 4 children,我想做这样的事情:
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.
}
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()',等等。没有 object。”
这件事能以某种方式完成吗?从 parent class?
调用 child 方法
一般情况下,父级不能调用子级方法。在本例中,您已将 class 创建为父类型,因此在子对象中调用某些内容是非常危险的,因为子对象可能会假定存在不在父对象中的成员方法或变量。
看看“四人帮”复合模式:
子 class 不应派生自父 class。
相反,Child 和 Parent classes 应该实现相同的接口,
我们称它为 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
这是交易。想象一下你的如下波纹管。 将文件加载到我想要的算法层后 能够应用4种不同的算法。所以算法 class 有 4 children,我想做这样的事情:
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.
}
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()',等等。没有 object。” 这件事能以某种方式完成吗?从 parent class?
调用 child 方法一般情况下,父级不能调用子级方法。在本例中,您已将 class 创建为父类型,因此在子对象中调用某些内容是非常危险的,因为子对象可能会假定存在不在父对象中的成员方法或变量。
看看“四人帮”复合模式:
子 class 不应派生自父 class。
相反,Child 和 Parent classes 应该实现相同的接口,
我们称它为 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