C++ OOP inheritance secrets...

How can I make a call from a parent class method to a child class method?
I'd expect this snippet to output "ChildClass doSomethingElse"...

/**
 * Parent class
 */
class ParentClass {
  public:
    void doSomething();
    void doSomethingElse();
};

void ParentClass::doSomething() {
  this->doSomethingElse();
}

void ParentClass::doSomethingElse() {
  Serial.println("ParentClass doSomethingElse");
}


/**
 * Child class
 */
class ChildClass: public ParentClass{
  public:
    void doSomethingElse();
};

void ChildClass::doSomethingElse() {
  Serial.println("ChildClass doSomethingElse");
}

// ========================================

void setup() {
  Serial.begin(9600);
  delay(1000);
  
  ChildClass x = ChildClass();
  x.doSomething();
}

void loop() {
}

Looks like a classic early vs. late binding issue. That is you are missing the "virtual" keyword.

http://www.exforsys.com/tutorials/c-plus-plus/c-virtual-functions.html

What you are attempting to do there isn't inheritance, but polymorphism. In order to redefine a method of a base class in a derived class, that method must be declared virtual in the base class. So:

class ParentClass {
  public:
    void doSomething();
    virtual void doSomethingElse();
};

This will allow a derived class to override the functionality implemented in the base class method.