#include <iostream>
class Thing {
public:
// A: unchanged
Thing(const int& val) : m_val(val) {
}
// B: calls getValue(), can't be const
void printValue() {
std::cout << "Value is " << getValue() << "\n";
}
// C: non-const function can still return const reference to members
const int& getValue() {
return m_val;
}
// D: calling getValue on parameter, thus parameter can't be const
void setValue(Thing& value) {
m_val = value.getValue();
}
private:
int m_val;
};
int main()
{
Thing thing1(1);
Thing thing2(2); // Passed to non-const function, can't be const
Thing thing3(3); // Calls non-const function, can't be const
// Print original
thing1.printValue();
thing2.printValue();
thing3.printValue();
// Set items
thing1.setValue(thing2);
thing3.setValue(thing2);
// Print updated
thing1.printValue();
thing2.printValue();
thing3.printValue();
return 0; // 0 = EXIT_SUCCESS
}