C++ 在类c++;

C++ 在类c++;,c++,class,C++,Class,最近我在做一个简单的游戏,游戏结构要求我声明很多类型的对象。。。为了简化函数的使用,我为所有其他类创建了一个父类。这是整个代码的一部分(简化): 问题是next函数将返回i,即使enemysol.dec=1 这段代码在我没有声明ship时起作用,但是如果我没有声明它,项目会非常混乱和庞大。您使用错误的方法初始化enemysol类的成员变量 当你写作时: int life=100,y=0,x; bool dec=0; 您可以声明新的成员变量,这些变量的名称与ship中已有的x、y和dec相同。因

最近我在做一个简单的游戏,游戏结构要求我声明很多类型的对象。。。为了简化函数的使用,我为所有其他类创建了一个父类。这是整个代码的一部分(简化):

问题是
next
函数将返回
i
,即使
enemysol.dec=1

这段代码在我没有声明
ship
时起作用,但是如果我没有声明它,项目会非常混乱和庞大。

您使用错误的方法初始化
enemysol
类的成员变量

当你写作时:

int life=100,y=0,x;
bool dec=0;
您可以声明新的成员变量,这些变量的名称与
ship
中已有的x、y和dec相同。因此,每次在enemysol类中使用x、y或dec时,都不会引用ship变量,因为这些变量是隐藏的

正确的做法是:

struct enemysol : public ship
{
    int life;  // define only additional member variables not already in ship
    enemysol()  // constructor 
        : y(0), dec(false), life(100)   // init members
    {
    }
    void declare()
    {
        dec=1;
        x=10+rand()%(getmaxx()-20);
        life=100;
        y=0;
    }
};

请注意,您有两个dec属性。一个是ship::dec,另一个是enemysol::dec。使用带有“main”的下一个函数并访问“dec”,将得到ship::dec,而不是您所期望的。从“enemysol”中删除“dec”,然后重试:)。我尝试编写void declare(){enemysol::dec=1;…},但没有成功。尽管如此,还是要谢谢你的帮助answering@OMID请再读一遍万宝路人的评论,特别是关于两处同名房产的前几句话,以及关于移除其中一处房产的评论。没关系,放轻松。。。让我们看看,使用继承(struct-enemysol:public-ship)意味着“ship”中的所有内容都将进入“enemysol”,对吗?。没有必要在“enemysol”中重新声明“dec”,因为它已经在“船”上了。当“敌人”想要访问“dec”时,它所需要做的就是将其命名为“dec=1”。把它想象成“enemysol”是“enemysol”和“ship”中所有内容的总和:因此你不需要两个“dec”(也就是说,完全删除“enemysol”中的一个,然后忘记它)。注意,所有这些都是“粗略的”:继承是一个更复杂的主题,但考虑到你只使用公共属性,它是正确的(只是不正确)“学术界”材料)。更像是:)。
struct enemysol : public ship
{
    int life;  // define only additional member variables not already in ship
    enemysol()  // constructor 
        : y(0), dec(false), life(100)   // init members
    {
    }
    void declare()
    {
        dec=1;
        x=10+rand()%(getmaxx()-20);
        life=100;
        y=0;
    }
};