Delegating Constructors in C++
Since C++11, a constructor can delegate its work to another constructor of the same class. This is the modern way in C++ to put common actions for all constructors in one constructor. In C++ code before C++11, you often used an init function for such a task.
class Degree{
int degree;
public:
Degree(int deg){ // (1)
degree= deg % 360;
if (degree < 0) degree += 360;
}
Degree(): Degree(0){} // (2)
Degree(double deg): Degree(static_cast(ceil(deg))){} // (3)
};
The constructors (2) and (3) of the class Degree delegate all its initialization work to the constructor (1), which verifies its arguments. Invoking constructors recursively is undefined behavior.