【问题标题】:How to execute overrided method C++如何执行覆盖的方法 C++
【发布时间】:2019-09-22 07:37:27
【问题描述】:

我将尝试创建一个结构来执行派生类中的覆盖方法。 我的基本代码结构:

Base.h已编辑

class Base 
{
protected:
    virtual void Initialize() = 0;
    virtual void Update() = 0;
public:
    void Init();
    void Upd();
};

Base.cpp

#include "Base.h"

void Base::Initialize() {}
void Base::Update() {}

void Base::Init() {
    // Some logic

    Initialize();
}

void Base::Upd() {
    // Some logic

    Update();
}

下面的类是要从其他实现Initialize()和Update()的N个类继承的类:

行为.h

#include <iostream>
#include "Base.h"

class Behaviour : public Base 
{
protected:
    virtual void Initialize();
    virtual void Update();
};

行为.cpp

#include "Behaviour.h"

void Bheaviour::Initialize() {
    std::cout << "Initialize called!" << std::endl;
}

void Bheaviour::Update() {
    std::cout << "Update called!" << std::endl;
}

然后我想在Base类中执行时执行Behavior Initialize()和Update()。我的主要功能是:

Core.cpp已编辑

#include "Behaviour.h"

int main() {
    Base* base = new Behaviour();

    base->Init();
    while(!quit) {
        base->Upd();
    }
}

提前感谢您的任何建议!

感谢所有建议,我已经解决了!

【问题讨论】:

  • 您需要一个适当类型的对象。在您最喜欢的 C++ 书籍中阅读有关虚函数的信息。

标签: c++ overriding abstract-class


【解决方案1】:

更改Base* base = new Base();

Base* base = new Bheviour;

并且多态会处理其他所有事情。 如果您不想在基类之外创建对象,最好将其声明为抽象类。

【讨论】:

  • 我会将 Initialize 和 Update 声明为纯虚函数 (= 0)。这将使 Base 成为一个抽象类,您将无法创建 Base 的实例,只能创建派生类的实例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
相关资源
最近更新 更多