我的C ++应用程序中有几个类的结构如下:
/- RedFixture
Fixture --
\- BlueFixture
因此,fixture基类有两个子类。
我想在基类中封装一些常用功能,以及存储一些常见属性。一个例子是一个简单的整数,我们称之为“当前”。基类声明如下:
class Fixture
{
public:
int current;
Fixture();
virtual void loop();
int next();
int prev();
};
下一个和以前的方法非常简单,字面上由一些条件和current++
或current--
组成。
在我的代码中的其他地方,我有一个指向Fixture
的指针,尽管该指针的实际类型可以是RedFixture
或BlueFixture
。当我拨打fixture->next()
时,我current
或RedFixture
的{{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
类型的指针上调用current
或next()
,也不应该正确修改prev()
计数器吗?
答案 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;
}