当我运行Setup()
时,我希望在我的控制台中看到“t”,然后是多个“x”字符。但是它只返回多个't'字符。这就像我的后悔永远不会被淹没。请参阅下面的代码示例:
class Returner
{
public:
Returner(){}
char test()
{
}
};
class TReturner: public Returner
{
public:
TReturner(){}
char test()
{
return 't';
}
};
class XReturner: public Returner
{
public:
XReturner(){}
char test()
{
return 'x';
}
};
void setup()
{
Serial.begin(9600);
TReturner t = TReturner();
Returner * retrn = &t;
while(1)
{
Serial.print( retrn.test());
XReturner x = XReturner();
retrn = &x;
_delay_ms(500);
}
}
答案 0 :(得分:0)
setup()将由引导加载程序调用一次。 (不要在其内部创建无限循环)
你应该定义一个loop()函数,它也会被引导加载程序“无限”地调用。
答案 1 :(得分:0)
我无法100%解释这种行为 - 我希望你不会打印任何字符,因为它使用的是Returner :: test - 但是如果你在C ++中覆盖一个函数则需要声明它在基类中是虚拟的:
class Returner
{
public:
Returner(){}
virtual char test()
{
}
};
没有测试是虚拟的,行
Serial.print( retrn.test() );
(你的意思是retrn->test()
?)只会选择test
的一个实现并始终使用它。如上所述,我希望这是空的Returner::test()
。您可能还需要制作Returner :: test abstract
virtual char test() = 0;
或者如果您将其保留为函数体,则返回一些值。