在另一个类中创建几个类的对象数组

时间:2017-06-12 20:34:42

标签: c++ arrays object

我正在制作一个模拟考试的项目,我遇到了这个问题。我有一个基类“任务”,和3个继承“任务”类的类。然后在新的类任务集合中,我必须创建一个数组,我将从“task”中放置所有3个继承类的对象。另外,所有这些都必须在任务集合类中完成,而不是在main函数中完成。

代码如下:

{{1}}

2 个答案:

答案 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);
}

Demo

您可以使用虚方法根据基本接口执行特定作业。

答案 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;
}