In math, if z = x+y/2, then z will always change whenever we replace the value of x and y. Can we do that in programming without having to specifically updating z whenever we change the value of x and y?

I mean something like that won’t work, right?

int x;
int y;
int z{x + y};
cin >> x;
cin >> y;
cout << z;

If you’re confused why I would need that, I want the variable shown live, and get it updated automatically when a rhs-variable make changes.

Like when killing a creep and get gold, then the net-worth (cash+worth of own items) shown changes. Or the speed meter of a car changing depending on how slow or fast you’re driving.


You mean something like this:

class Z
    int& x;
    int& y;
    Z(int& x, int& y) : x(x), y(y) { }
    operator int() { return x + y; }

The class delays calculation of the result until casted as int. As cast operator is not explicit, Z can be used whenever an int is required. As there’s an overload of operator<< for int, you can use it with e. g. std::cout directly:

int x, y;
Z z(x, y);
std::cin >> x >> y;
if(std::cin) // otherwise, IO error! (e. g. bad user input)
    std::cout << z << std::endl;

Be aware, though, that there’s still a function call (the implicit one of the cast operator), even though it is not visible. And actually the operator does some true calculations (rather than just accessing an internal member), so it is questionable if hiding away the function call really is a good idea…