bool \"bar\" is by default true, but it should be false, it can not be initiliazied in the constructor. is there a way to init it as false without making it static?
You can initialize any variable when you declare it.
bool bar = 0;
This program has undefined behavior. Intrinsic types do not have constructors. You could do bool bar = bool();
but it's better to define the actual value in your foo class.
Try this:
class Foo
{
public:
void Foo();
private:
bool bar;
}
Foo::Foo() : bar(false)
{
if(bar)
{
doSomething();
}
}
Since you're using the value of bar in the ctor, I assume you're trying to set it before the object is created? I think you meant to make it a static class variable instead of an instance variable.
In fact, by default it's not initialized at all. The value you see is simply some trash values in the memory that have been used for allocation.
If you want to set a default value, you'll have to ask for it in the constructor :
class Foo{
public:
Foo() : bar() {} // default bool value == false
// OR to be clear:
Foo() : bar( false ) {}
void foo();
private:
bool bar;
}
UPDATE C++11:
If you can use a C++11 compiler, you can now default construct instead (most of the time):
class Foo{
public:
// The constructor will be generated automatically, except if you need to write it yourself.
void foo();
private:
bool bar = false; // Always false by default at construction, except if you change it manually in a constructor's initializer list.
}
Klaim's answer is spot on. To "solve" your problem you could use a constructor initialization list. I strongly suggest you read that page as it may clear up some similar queries you may have in future.