C++修改超类中声明的实例变量
C++ Modifying Instance Variable Declared in Superclass
我的C++应用程序中有几个类的结构如下:
/- RedFixture
Fixture --
- BlueFixture
因此,fixture基类有两个子类。
我想在基类中封装一些常见的功能,并存储一些常见的属性。一个例子是一个简单的整数,我们称之为"current"。基类声明如下:
class Fixture
{
public:
int current;
Fixture();
virtual void loop();
int next();
int prev();
};
下一个和前面的方法都非常简单,从字面上讲是由一些条件和current++
或current--
组成的。
在代码的其他地方,我有一个指向Fixture
的指针,尽管该指针的实际类型可能是RedFixture
或BlueFixture
。当我调用fixture->next()
时,我没有看到current
在RedFixture
或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()
时反映出来,但事实并非如此。相反,current
变量似乎没有变化。
鉴于我是C++的新手,我是否误解了继承的工作原理?即使我使用多态性并在类型为Fixture
的指针上调用next()
或prev()
,current
计数器难道不应该被正确修改吗?
打印以下代码:
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;
}
相关文章:
- 返回 C++ 中的指针实例变量
- 返回实例变量的c++方法可以访问变量中的数据,但不能更改它,但在编译时不会生成错误
- C++ 实例变量初始值设定项中的重复类型
- 为什么可以在没有实例变量的情况下访问静态回调方法中的静态成员变量?
- C++ 中实例变量的双冒号
- 我可以在没有任何实例变量的情况下使用 decltype 吗?
- OpenMP 私有类实例变量
- C 取消实例变量指针
- 在C++私有区域中初始化实例变量
- 如何将指针存储在实例变量中,该指针被声明为指向基类的指针
- 如何在Arduino中创建另一个类库的实例变量
- 单元测试呼叫实例变量的函数
- 为构造函数初始化引用实例变量提供默认值
- 如何使编译器在实例变量未初始化时C++生成错误或警告
- 如何超载分配运算符,该操作员总计两个实例变量
- C++:通过引用传递或使用私有实例变量
- 对象作为类内的实例变量
- 在不构造实例变量的情况下C++声明实例变量的好方法是什么?
- 实例变量列表中的对象未被保留?指针问题
- Asio完成处理程序中的实例变量无效