#include <iostream>
class Widget
{
public:
Widget(): x(0) {} // constructor with initialization list
void setX(int newVal) { x = newVal; } // changes the state of an instance
void printX() { std::cout << x << std::endl; } // interacts with the state of an instance
static void printClassName() { std::cout << "Widget" << std::endl; } // doest change or interact with the state therefore can be made static
private:
int x;
};
int main(int argc, char* argv[])
{
Widget w;
w.printX();
w.setX(4);
w.printX();
Widget::printClassName();
//w::printX(); <-- this won't compile because it is not static
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgV2lkZ2V0CnsKcHVibGljOgogICAgV2lkZ2V0KCk6IHgoMCkge30gLy8gY29uc3RydWN0b3Igd2l0aCBpbml0aWFsaXphdGlvbiBsaXN0CiAgICB2b2lkIHNldFgoaW50IG5ld1ZhbCkgeyB4ID0gbmV3VmFsOyB9IC8vIGNoYW5nZXMgdGhlIHN0YXRlIG9mIGFuIGluc3RhbmNlCiAgICB2b2lkIHByaW50WCgpIHsgc3RkOjpjb3V0IDw8IHggPDwgc3RkOjplbmRsOyB9IC8vIGludGVyYWN0cyB3aXRoIHRoZSBzdGF0ZSBvZiBhbiBpbnN0YW5jZQogICAgCiAgICBzdGF0aWMgdm9pZCBwcmludENsYXNzTmFtZSgpIHsgc3RkOjpjb3V0IDw8ICJXaWRnZXQiIDw8IHN0ZDo6ZW5kbDsgfSAvLyBkb2VzdCBjaGFuZ2Ugb3IgaW50ZXJhY3Qgd2l0aCB0aGUgc3RhdGUgdGhlcmVmb3JlIGNhbiBiZSBtYWRlIHN0YXRpYwpwcml2YXRlOgogICAgaW50IHg7Cn07CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQp7CiAgICBXaWRnZXQgdzsKICAgIHcucHJpbnRYKCk7CiAgICB3LnNldFgoNCk7CiAgICB3LnByaW50WCgpOwogICAgV2lkZ2V0OjpwcmludENsYXNzTmFtZSgpOwogICAgLy93OjpwcmludFgoKTsgPC0tIHRoaXMgd29uJ3QgY29tcGlsZSBiZWNhdXNlIGl0IGlzIG5vdCBzdGF0aWMKICAgIAogICAgcmV0dXJuIDA7Cn0=