gpt4 book ai didi

c++ - 使用父类c++中的子方法

转载 作者:搜寻专家 更新时间:2023-10-31 01:39:00 24 4
gpt4 key购买 nike

这是交易。想象一下你的如下波纹管。将文件加载到我想要的算法层后能够应用4种不同的算法。所以算法类有 4 个 child ,我想做这样的事情:

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.
}

children 是这样的:

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()’等。没有对象。”这件事能以某种方式完成吗?从父类调用子方法?

最佳答案

看看“四人帮”复合模式:

子类不应派生自父类。相反,子类和父类应该实现相同的接口(interface),我们称它为 IAlgorithm。这个接口(interface)应该有一个纯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++ - 使用父类c++中的子方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31974008/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com