In what order are methods called when you have class hierarchy?
<p>Consider:</p>

<pre><code>class Mobile {
  double memory_util;
  public:
  virtual void power_save(double duration) = 0;
};

class Laptop : public Mobile {
  bool is_unlocked;
  protected:
  bool is_charged;
  public:
  void power_save(double duration);
  virtual double remaining_time();
};

class NegativeNumber {}; 
class IPad : public Laptop {
  int generation;
  public:
  void power_save(double duration);
  bool isJailBroken();
};

class HPLaptop : public Laptop {
  int warranty_years; 
  public:
  void extend_warranty(int years);
};

class HPdv6 : public HPLaptop {
  bool repaired;
  public:
  double remaining_time(){  return HPLaptop::remaining_time();  }
  bool is_repaired { return repaired; }
};
</code></pre>

<p>And you wanted to do the following:</p>

<pre><code>int main () {
  Mobile* d = new HPdv6();
  Laptop *s = d;
  d-&gt;power_save(100);
  cout &lt;&lt; “remaining operation time: ” &lt;&lt;
  s-&gt;remaining_time() &lt;&lt; endl;
  return 0;
}
</code></pre>

<p>Which methods would actually be called here?  I understand that Mobile is a virtual function, but I'm unsure how to deal with the class hierarchy when you have pointers like this.  Are there any tips about class hierarchy that will make problems that deal with various inherited classes easier to understand?</p>

<p>Thank you.</p>
