根据我对此处指针的理解,currentDancer
和pushups
应该是相同的参考。然而,如果我设置currentDancer
我就无法使用它。
Dancer *currentDancer;
DancerPushups pushups; // DancerPushups inherits from public Dancer
void setup() {
pushUps.init(FL1, FL2, FR1, FR2, BR1, BR2, BL1, BL2);
currentDancer = &pushups; // try to set pushups as the current dancer
}
void loop() {
pushups.onBeatStart(duration); // works great! :D
currentDancer->onBeatStart(duration); // does nothing D:
}
指针处理的哪个部分我在这里失败了?如何让Dancer *currentDancer
指向我已经创建的任意实例?
更新:
这是继承问题吗?
void Dancer::onBeatStart(float duration) {
// no-op
}
// DancerPushups : public Dancer
void DancerPushups::onBeatStart(float duration) {
all(the, cool, stuff, that, isnt, happening);
}
因为我将DancerPushups
转换为Dancer*
类型,我是不是在运行我的子类方法?
答案 0 :(得分:1)
听起来onBeatStart
不是virtual
成员函数。当你调用currentDancer->onBeatStart()
时,你正在调用基类实现,如你所示,它实现了什么。