C++ abstract class inheritance : <p>Suppose that I have this piece of code:</p>

<pre><code>class Vehicle {
   virtual const char* media() const = 0;
   virtual unsigned speed() const = 0;
} V, *PV;
class LandVehicle : public Vehicle {
   const char* media() const override{ return "Land";}
} L,  *PL;
class Train : public LandVehicle{
   virtual unsigned speed() const override {return 130;}
} T, *PT;
</code></pre>

<p>I have a few questions about it :D</p>

<p>1) LandVehicle doesn't implement speed(). is that an error and if so, what kind of error? or does it just make it an abstract class as well ?</p>

<p>2) is the keyword <strong>override</strong> in class LandVehicle in method media() used correctly? as a derived class from an abstract class is it really overriding the method?</p>

<p>3) same as 2 for <strong>override</strong> in Train's speed() method.</p>

<p>4) is Train a concrete class now?</p>

<p>5) is it necessary to add the keyword <strong>virtual</strong> in the declaration of LandVehicle's media() method?</p>

<p>6) if I add this method in Train class:</p>

<pre><code>const char* media() const{ return "Just a train";}
</code></pre>

<p>does it hide LandVehicle's media() or does it override it ?</p>

<p>7) after adding the method in 6, can LandVehicle's media() be accessed in Train class?</p>
