design – Should setters only set values?

I always like to think too much about things, so here is my thought of the day:

Should setters only set class property values ​​and not make any other logic?

Suppose I have a class

User class {
private:
int age;
bool is_alive;
public:
int GetAge ();
void SetAge ();
boolerate GetIsAlive ();
empty SetIsAlive ();
};

Calling User :: SetAge (5), we could assume that user.age == 5. But what about User :: GetIsAlive ()? Should setting the age of the user also run internal logic is alive property, or should it belong to the user of the class?

Should he just do exactly what the function says?

void User :: SetAge (int age) {
this-> age = age;
}

or add additional operations?

void User :: SetAge (int age) {
this-> age = age;
this-> is_alive = (age <100);
}

Should this be more explicit?

void User :: DetermineIsAlive () {
this-> is_alive = (age <100);
}

Obviously, this is a simple case, but in my real examples, I do something like setting the activated state of a class (Device.SetState (false)) can then stop subcomponents, update status, and so on.

I'm just curious if we think that setters should ONLY set values ​​or properties, and multi-instructional functions should be more explicit in their naming.