Your understanding of the const keyword on the getter is correct! One caveat here is that it could modify member variables if they are marked as mutable and you may want this if you want logical const and not bitwise const. Logical const means this function call will not change the behavior of the program but it can still modify mutable members (perhaps you are modifying a lastUpdated variable or a counter that needs to be updated each time the function is called). Bitwise const is the default and that's what you described (it can't modify any of the member variables).
For functions that take in arguments (your setter in this example), if they do not need to modify the value then it should be passed in as const. Const here means the object passed in cannot be changed. In this case though, you are passing an integer by value so the function will have it's own copy of the variable and not the original int variable from the call site so it cannot modify the original variable. Since it's a copy it doesn't matter if it's const or not (in terms of modifying the original variable). If this was passed in by pointer or by reference then you would most definitely want to pass it in by const in that case (unless of course you also intended on modifying the passed in parameter).
It is also valid to want to use const on pass by value as well, just be consistent and follow the coding standards at the company you work for. If you don't have a standard for this in place, recommend one and stick to it.
Also note that these 2 function declarations are identical so don't try adding both of these in your header file:
void setValue (int val);
void setValue (const int val);
The const here is redundant and should be left out in the header file as it would only confuse the readers of the header file (both of these setters are const correct since they cannot modify the val parameter). But within your implementation of the function in the .cpp it can make perfect sense to put the const in there (even though it's not needed for const correctness). It can stop accidental bugs such as doing:
if (p = 2) {}
instead of the equivalent check:
if (p == 2) {}
If p was passed as const int we would've caught this. So yeah its a common standard to leave the const off in the header file but you can keep it in the implementation. This recommendation actually comes from a popular book called C++ Coding Standards by Herb Sutter and Andrei Alexandrescu, definitely check it out some time for some more best practices!