我正在制作一个模拟考试的项目,我遇到了这个问题。我有一个基类“任务”,和3个继承“任务”类的类。然后在新的类任务集合中,我必须创建一个数组,我将从“task”中放置所有3个继承类的对象。另外,所有这些都必须在任务集合类中完成,而不是在main函数中完成。
代码如下:
{{1}}
答案 0 :(得分:0)
您可以执行以下操作:
#include <iostream>
#include <sstream>
#include <vector>
#include <memory>
class Task
{
std::string content;
public:
explicit Task(const std::string& title) : content{title} {}
virtual ~Task() = default;
virtual bool check(std::istream& is) const = 0;
};
class TaskNumber : public Task
{
int value;
public:
TaskNumber(const std::string& title, int value) : Task{title}, value{value} {}
bool check(std::istream& is) const override
{
int i;
is >> i;
return i == value;
}
};
class TaskString : public Task
{
std::string value;
public:
TaskString(const std::string& title, const std::string& s) : Task{title}, value{s} {}
bool check(std::istream& is) const override
{
std::string s;
is >> s;
return s == value;
}
};
class TaskCollection
{
public:
void addTask(std::unique_ptr<Task> task) { tasks.push_back(std::move(task)); }
void run(std::istream& is) {
for (auto& task : tasks) {
std::cout << (task->check(is) ? "Success\n" : "Failed\n");
}
}
private:
std::vector<std::unique_ptr<Task>> tasks;
};
int main()
{
TaskCollection tasks;
tasks.addTask(std::make_unique<TaskString>("t1", "Hello"));
tasks.addTask(std::make_unique<TaskString>("t2", "world"));
tasks.addTask(std::make_unique<TaskNumber>("t3", 42));
std::string s{"Hi world 42"};
std::stringstream ss{s};
tasks.run(ss);
}
您可以使用虚方法根据基本接口执行特定作业。
答案 1 :(得分:-1)
我认为ZadanieNumer(string tresc1, string pop)
是翻译错误,应该是TaskString(string contents1, string pop)
。
现在我不确定问题是什么,但根据您的定义,class TaskCollection
可能很简单:
class TaskCollection
{
private:
Task collection[3];
public:
TaskCollection(Task4Answ task1, TaskNumber task2, TaskString task3)
{
collection[0] = task1;
collection[1] = task2;
collection[2] = task3;
}
}
我用这个主要功能来测试:
int main(int argc, char *argv[])
{
Task4Answ t1("contents", "a1", "b1", "c1", "d1");
TaskNumber t2("contents", 2);
TaskString t3("contents", "3");
TaskCollection tc(t1, t2, t3);
return 0;
}