我对一些奇怪的行为感到沮丧,并想知道我是否假设某些事情没有问题。以下是否有效,即我可以修改被覆盖的m_flag
中的foo()
吗?如果是这样的话,会发生一些更加险恶的事情,因为我看到m_flag
是一回事,然后当我知道我没有主动修改它时,我只会报告其他事情B::foo()
class A {
public:
virtual void foo() {
// Do something.
}
};
class B : public A{
public:
virtual public void foo() {
m_flag++;
}
private:
volatile uint8_t m_flag;
};
答案 0 :(得分:1)
我可以修改被覆盖的
m_flag
中的foo()
吗?
<击>否。因为在您发布的代码中,class B
不会从class A
继承。这意味着,没有foo()
可以覆盖。
class B
自己声明m_flag
,因此您可以在B::foo()
中修改它。
请注意,正如其他人已经说过的那样,bool上的增量运算符已被弃用。
答案 1 :(得分:1)
是的,但是......
m_flag
的类型为bool
。增加bool
是
从一开始就弃用,并且有点令人惊讶
语义:它相当于将值设置为true
。
(这种奇怪行为的原因可以追溯到早期
C天,没有任何bool
类型。一个特别的
成语是这样的:
int argsSeen = 0;
// ...
if ( arg1Present ) {
argsSeen ++;
// ...
}
// And so on for each of the possible args...
if ( argsSeen ) {
// whatever...
}
这个想法是通过允许增量,代码使用
这个习惯用法可以将argsSeen
更改为bool
,而不是。{
断裂。