title: Abtract class derived from a nomal class. Is that valid?
body: <p>Is the following a valid design in C++?</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;memory&gt;
  
  using namespace std;
  
  struct Base {
      virtual void SomeMethod() {
          std::cout&lt;&lt;"Do Something"&lt;&lt;std::endl;
      }
  };
  
  struct Der : public Base {
      virtual void SomeMethod() override = 0;
  };
  
  struct DerDer : Der {
      virtual void SomeMethod() override
      {
          std::cout&lt;&lt;"Do something derived."&lt;&lt;std::endl;
      }
  };
  
  int main(int argc, char *argv[])
  {
      auto x = std::unique_ptr&lt;Base&gt;(new DerDer);
      x-&gt;SomeMethod();
      return 0;
  }
  </code></pre>
  
  <p>It works on g++ 6.2.</p>
  
  <p>I'm deriving from a normal class, converting that method to abstract, and then overriding it after deriving again. </p>
  
  <p><strong>Is it correct in C++ to derive from a class, and then turn an implemented method back to abstract?</strong></p>
  
  <p>The reason I need to do this, is that in a big program, to which I'm adding features, I'm trying to <a href="https://stackoverflow.com/questions/42979185/consequences-of-changing-inheritance-to-virtual">avoid a diamond model</a>. To do that, I'm planning to put all common methods in the class <code>Der</code>, and make everything inherit from it, without messing with the <code>Base</code> class.</p>