gpt4 book ai didi

java - C++:使用抽象方法创建抽象类并覆盖子类中的方法

转载 作者:IT老高 更新时间:2023-10-28 22:00:59 26 4
gpt4 key购买 nike

如何在 C++ 中创建一个带有一些我想在子类中覆盖的抽象方法的抽象类? .h 文件的外观应该如何?有没有.cpp,如果有,应该怎么看?

在 Java 中它看起来像这样:

abstract class GameObject
{
public abstract void update();
public abstract void paint(Graphics g);
}

class Player extends GameObject
{
@Override
public void update()
{
// ...
}

@Override
public void paint(Graphics g)
{
// ...
}

}

// In my game loop:
List<GameObject> objects = new ArrayList<GameObject>();
for (int i = 0; i < objects.size(); i++)
{
objects.get(i).update();
}
for (int i = 0; i < objects.size(); i++)
{
objects.get(i).paint(g);
}

将这段代码翻译成 C++ 对我来说就足够了。

编辑:

我创建了代码,但是当我尝试迭代对象时出现以下错误:

Game.cpp:17: error: cannot allocate an object of abstract type ‘GameObject’
GameObject.h:13: note: because the following virtual functions are pure within ‘GameObject’:
GameObject.h:18: note: virtual void GameObject::Update()
GameObject.h:19: note: virtual void GameObject::Render(SDL_Surface*)
Game.cpp:17: error: cannot allocate an object of abstract type ‘GameObject’
GameObject.h:13: note: since type ‘GameObject’ has pure virtual functions
Game.cpp:17: error: cannot declare variable ‘go’ to be of abstract type ‘GameObject’
GameObject.h:13: note: since type ‘GameObject’ has pure virtual functions

使用此代码:

vector<GameObject> gameObjects;

for (int i = 0; i < gameObjects.size(); i++) {
GameObject go = (GameObject) gameObjects.at(i);
go.Update();
}

最佳答案

在 Java 中,默认情况下所有方法都是 virtual,除非您将它们声明为 final。在 C++ 中则相反:您需要显式声明您的方法 virtual。为了使它们成为纯虚拟,您需要将它们“初始化”为 0 :-) 如果您的类中有纯虚拟方法,它会自动变为抽象 - 没有明确的关键字。

在 C++ 中,您应该(几乎)始终为基类 virtual 定义析构函数,以避免棘手的资源泄漏。所以我将它添加到下面的示例中:

// GameObject.h

class GameObject
{
public:
virtual void update() = 0;
virtual void paint(Graphics g) = 0;
virtual ~GameObject() {}
}

// Player.h
#include "GameObject.h"

class Player: public GameObject
{
public:
void update();

void paint(Graphics g);
}

// Player.cpp
#include "Player.h"

void Player::update()
{
// ...
}

void Player::paint(Graphics g)
{
// ...
}

关于java - C++:使用抽象方法创建抽象类并覆盖子类中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2936844/

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