程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在向量中调用覆盖函数 (C++)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在向量中调用覆盖函数 (C++)?

开发过程中遇到在向量中调用覆盖函数 (C++)的问题如何解决?下面主要结合日常开发的经验,给出你关于在向量中调用覆盖函数 (C++)的解决方法建议,希望对你解决在向量中调用覆盖函数 (C++)有所启发或帮助;

我在尝试调用附加到向量的对象的覆盖函数时遇到问题。我不太确定我是否只是不完全理解指针和引用,所以我不太确定在调试这个问题时要寻找什么。

这是我的代码:

#include <iostream>
#include <vector>

class Task {
    public:
        Task(std::vector<Task> *List) {
            List->push_back(*this);
        }

        virtual voID Run() {
            std::cout << "Called Task Run!" << std::endl;
        }
};

class OverrIDeTask : public Task {
    public:
        OverrIDeTask(std::vector<Task> *List) : Task(List) {}
        voID Run() overrIDe {
            std::cout << "Called OverrIDe Run!" << std::endl;
        }
};

int main() {
    std::cout << "Main method entered" << std::endl;
    std::vector<Task> listofTasks;

    OverrIDeTask ot = OverrIDeTask(&listofTasks);
    Task t = Task(&listofTasks);

    for(int i = 0; i < listofTasks.size(); i++) {
        listofTasks[i].Run(); // Will print "Called Task Run!" twice.
    }

    ot.Run(); // Prints "Called OverrIDe Run!"
    t.Run(); // Prints "Called Task Run!"
}

当我循环遍历向量时,似乎无法调用覆盖函数,但是当我直接从对象中调用它们时,它们似乎可以工作。有人能指出我正确的方向吗?

解决方法

尝试像这样将基指针存储在向量中。 @Christophe 让我提醒我们存储指针,这意味着 Task 对象 必须活着。另请参阅@Quimby 关于使用 unique_ptr 而不是 Task * 的说明。

#include <iostream>
#include <vector>

class Task {
    public:
        Task(std::vector<Task *> *list) {
            list->push_back(this);
        }

        virtual void Run() {
            std::cout << "Called Task Run!" << std::endl;
        }
};

class OverrideTask : public Task {
    public:
        OverrideTask(std::vector<Task *> *list) : Task(list) {}
        void Run() override {
            std::cout << "Called Override Run!" << std::endl;
        }
};

int main() {
    std::vector<Task *> listOfTasks;
    OverrideTask ot = OverrideTask(&listOfTasks);
    Task t = Task(&listOfTasks);
    for(int i = 0; i < listOfTasks.size(); i++) {
        listOfTasks[i]->Run();
    }
} 

大佬总结

以上是大佬教程为你收集整理的在向量中调用覆盖函数 (C++)全部内容,希望文章能够帮你解决在向量中调用覆盖函数 (C++)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: