#include <iostream>
using namespace std;
class Foo
{
const int m_bar; // can be initalized only once
int m_zoo; // must be constructed (default possible) but can be overwritten
public:
Foo(): m_bar(1), m_zoo(2) {} // the constant can never be changed
Foo(int i)
: Foo() {m_zoo=i;} // you can still change in the body already constructed items
Foo(int i, int j) : m_bar(i), m_zoo(j) {} // comprehensive init
Foo(char a) : Foo(a,2) {}; // just delegate to the comprehensive version
void show () { cout<<"bar="<<m_bar<<",zoo="<<m_zoo<<endl; }
};
int main() {
Foo a, b(11), c(11,13), d('\r');
a.show(); b.show(); c.show(); d.show();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgRm9vCnsKICBjb25zdCBpbnQgbV9iYXI7CQkJCS8vIGNhbiBiZSBpbml0YWxpemVkIG9ubHkgb25jZSAKICBpbnQgbV96b287CQkJCQkvLyBtdXN0IGJlIGNvbnN0cnVjdGVkIChkZWZhdWx0IHBvc3NpYmxlKSBidXQgY2FuIGJlIG92ZXJ3cml0dGVuCnB1YmxpYzoKICBGb28oKTogbV9iYXIoMSksIG1fem9vKDIpIHt9ICAvLyB0aGUgY29uc3RhbnQgY2FuIG5ldmVyIGJlIGNoYW5nZWQKICBGb28oaW50IGkpIAogICA6IEZvbygpIHttX3pvbz1pO30JCQkvLyB5b3UgY2FuIHN0aWxsIGNoYW5nZSBpbiB0aGUgYm9keSBhbHJlYWR5IGNvbnN0cnVjdGVkIGl0ZW1zCiAgRm9vKGludCBpLCBpbnQgaikgOiBtX2JhcihpKSwgbV96b28oaikge30gICAvLyBjb21wcmVoZW5zaXZlIGluaXQgIAogIEZvbyhjaGFyIGEpIDogRm9vKGEsMikge307ICAgLy8ganVzdCBkZWxlZ2F0ZSB0byB0aGUgY29tcHJlaGVuc2l2ZSB2ZXJzaW9uCiAgdm9pZCBzaG93ICgpIHsgY291dDw8ImJhcj0iPDxtX2Jhcjw8Iix6b289Ijw8bV96b288PGVuZGw7IH0KfTsKCmludCBtYWluKCkgewoJRm9vIGEsIGIoMTEpLCBjKDExLDEzKSwgZCgnXHInKTsgCglhLnNob3coKTsgYi5zaG93KCk7IGMuc2hvdygpOyBkLnNob3coKTsgCglyZXR1cm4gMDsKfQ==