请选择 进入手机版 | 继续访问电脑版
  • 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

java - C++:使用抽象方法创建抽象类,并在子类中重写该方法

[复制链接]
菜鸟教程小白 发表于 2022-8-3 00:17:59 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

如何在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();
}



Best Answer-推荐答案


在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 "layer.h"

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

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

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap