当前位置: 首页 > 知识库问答 >
问题:

在单独的.cpp和.h文件中处理类时,实现继承的正确方法是什么?

闻人河
2023-03-14

我刚接触C++,为了练习,我决定编写一个简单的控制台游戏。我最初都是在main.cpp文件中编写的,但现在我决定将所有的类拆分,以便更容易阅读。我查阅了一些关于如何正确执行此操作的教程,但我似乎遇到了一个无法找到解决方法的错误。

这里是一个“块”的基类。不同纹理的块继承自此基块。

这是头文件的代码:

#pragma once
#include <html" target="_blank">iostream>

class BaseBlock { //Base block class
private:
    int PosX, PosY;
protected:
    std::string Appearance;
    bool        IsActive;

public:
    BaseBlock(int x, int y);

    virtual inline int          getX();
    virtual inline int          getY();
    virtual inline bool         getIsActive();
    virtual inline std::string  getAppearance();
    virtual inline void         setActive(bool isactive);

};

下面是它的.cpp文件:

 #include "clsBaseBlock.h"



    BaseBlock::BaseBlock(int x, int y) {
        PosX        = x;
        PosY        = y;
        Appearance  = ' ';
        IsActive    = false;
    }

    inline int          BaseBlock::getX()                   { return PosX; }
    inline int          BaseBlock::getY()                   { return PosY; }
    inline bool         BaseBlock::getIsActive()            { return IsActive; }
    inline std::string  BaseBlock::getAppearance()          { return Appearance; }
    inline void         BaseBlock::setActive(bool isactive) { IsActive = isactive; }

下面是其中一个派生类的头的代码:

 #pragma once
#include "clsBaseBlock.h"

class BlockWeak : public BaseBlock { // Third derived block class
public:
    BlockWeak(int x, int y) : BaseBlock(x, y) {} //Here is the inheritance
};

下面是它的.cpp文件:

  #include "clsBlockWeak.h"

BlockWeak::BlockWeak(int x, int y): BaseBlock(x,y){
        Appearance = "\xB1";
        IsActive = true;
    }

从这段代码中,我会在派生类的头文件中发现各种错误,比如:

-语法错误:“symbol”:成员函数定义应以“}”结尾-基/成员初始值设定项列表中尾随“char”非法

然后在.cpp文件中得到:

-键入“int”意外-找到意外的文件结尾

任何关于如何纠正我的代码的信息将非常感谢。

共有1个答案

姜鸿畴
2023-03-14
BlockWeak(int x, int y) : BaseBlock(x, y) {} //Here is the inheritance

不,不是。这里是继承:

class BlockWeak : public BaseBlock

下面是构造函数的完整定义,您也在.cpp文件中提供了该定义,因此可能违反了一个定义规则

BlockWeak(int x, int y) : BaseBlock(x, y) {} 

您可能应该删除从:开始的部分,包括{}并将其移动到定义中

 类似资料:
  • 本文向大家介绍Javascript中类式继承和原型式继承的实现方法和区别之处,包括了Javascript中类式继承和原型式继承的实现方法和区别之处的使用技巧和注意事项,需要的朋友参考一下 在所有面向对象的编程中,继承是一个重要的话题。一般说来,在设计类的时候,我们希望能减少重复性的代码,并且尽量弱化对象间的耦合(让一个类继承另一个类可能会导致二者产生强耦合)。关于“解耦”是程序设计中另一个重要的话

  • 问题内容: 假设我有多个继承方案: 有编写的两个典型方法的: (老式) (较新的样式) 但是,无论哪种情况,如果父类(和)没有遵循相同的约定,则代码将无法正常工作(某些代码可能会丢失,或被多次调用)。 那么又是什么正确的方法呢?说“保持一致,遵循一个或另一个”很容易,但是如果或来自第三方图书馆,那又如何呢?有没有一种方法可以确保所有父类构造函数都被调用(以正确的顺序,并且只能调用一次)? 编辑:看

  • 所以,我想实现一个非常简单的输出。 我有与字段成功,消息和列表数据响应类。 和请求类 null null 我试过很多方法,但最后都没能做到。

  • 问题内容: 我遇到这种情况,我需要将a解析为an ,但我不知道该如何处理。当我没有抓住它时,编译器不会抱怨,但是我只是想确保自己能够正确处理这种情况。 我只想这样简化我的代码。编译器没有问题,但是线程在上死掉了。 Google CodePro希望我以某种方式记录该异常,并且我同意这是最佳实践。 我希望当当前片段不是数字或无法解析时返回此方法。当我没有显式捕获时,是否不分配变量?还是有一些默认值返回

  • 我一直在读关于在处理子类时如何最好地重写equals方法的文章,在这里我发现了不少帖子。他们建议使用instanceof或getClass()实现解决方案的不同方法来比较不同子类的对象。 然而,关于有效的Java,我的理解是(我对这一点还不熟悉,所以我很可能是错的!)布洛赫认为,最终两者都会有问题,“除非你愿意放弃面向对象抽象的好处,否则没有办法在保留equals契约的同时扩展一个可实例化类并添加

  • 问题内容: 我一直在使用spring-webflux进行一些研究,我想了解使用路由器功能处理错误的正确方法。 我创建了一个小项目来测试几个场景,并且我希望获得有关它的反馈,并查看其他人在做什么。 到目前为止,我在做什么。 提供以下路由功能: 我已经在我的处理程序上执行了 它们是我的错误处理程序: 这是完整的示例存储库: https://github.com/LearningByExample/re