Yes, it is not required and is usually omitted. It might be required for accessing variables after they have been overridden in the scope though:
Person::Person() {
int age;
this->age = 1;
}
Also, this:
Person::Person(int _age) {
age = _age;
}
It is pretty bad style; if you need an initializer with the same name use this notation:
Person::Person(int age) : age(age) {}
More info here: https://en.cppreference.com/w/cpp/language/initializer_list