C ++修改实例变量在超类中声明

时间:2015-11-03 03:54:04

标签: c++ polymorphism

我的C ++应用程序中有几个类的结构如下:

           /- RedFixture
 Fixture --
           \- BlueFixture

因此,fixture基类有两个子类。

我想在基类中封装一些常用功能,以及存储一些常见属性。一个例子是一个简单的整数,我们称之为“当前”。基类声明如下:

class Fixture
{
  public:
    int current;

    Fixture();

    virtual void loop();

    int next();

    int prev();
};

下一个和以前的方法非常简单,字面上由一些条件和current++current--组成。

在我的代码中的其他地方,我有一个指向Fixture的指针,尽管该指针的实际类型可以是RedFixtureBlueFixture。当我拨打fixture->next()时,我currentRedFixture的{​​{1}}实施内部未发现BlueFixture更改。

loop() / RedFixture声明如下:

BlueFixture

#ifndef RedFixture_H #define RedFixture_H #include "Fixture.h" class Animation; class RedFixture : public Fixture { public: /** * Construct a new fixture */ RedFixture(); /** * Setup the fixture and perform any initialization necessary */ virtual void setup(); /** * Perform the loop */ virtual void loop(); }; #endif / RedFixture实施BlueFixture的示例,我在其中访问loop()变量:

current

而且,在代码的其他方面,我有类似的东西:

void RedFixture::loop()
{
  Animation *currentAnim = animations.at(current);
  currentAnim->animate(leds);
}

我希望Fixture *fixture = fixtures.at(0); fixture->next(); 属性递增,并在下次current被调用时反映出来,但事实并非如此。相反,loop()变量似乎不会改变。

鉴于我是C ++的新手,我是否误解了继承是如何工作的?即使我使用多态并在current类型的指针上调用currentnext(),也不应该正确修改prev()计数器吗?

1 个答案:

答案 0 :(得分:0)

以下代码打印:

Nothing
1

希望这能解答您关于多态性以及它与代码的关系的一些问题。对不起,如果我诅咒你的功能的预期目的,但只是试图给你一些背景。

#include <iostream>
using namespace std;

class Fixture{
public:
    int current = 0;
    virtual void loop(){ 
        cout << "Nothing" << endl;
    }
    void next(){
        current++;
    }
};


class AwesomeFixture : public Fixture{
    public:
        void next(){
            // Do nothing
            cout << "Nothing" << endl;
        }
        virtual void loop(){
            next();
        }
};

int main(int argc, char * argv[]){

    Fixture * fixture = new AwesomeFixture();
    fixture->loop();
    fixture->next();
    cout << fixture->current << endl;

    return 0;
}