title: When should a virtual method be pure?
body: <p>I have found some code that I am working on, and was wondering what the best design implementation is.</p>
  
  <p>If a base class defines a method as virtual, but implements an empty body as well, thus not requiring the derived classes to implement a body, should it not be made pure instead?</p>
  
  <pre><code>virtual void AMethod1() {}                 // 1
  virtual void AMethod2() {assert(false);}   // 2
  virtual void AMethod3() = 0;               // 3
  </code></pre>
  
  <ol>
  <li>Current code.</li>
  <li>Idea1: Alerts user that this derived object has not implemented this method body.</li>
  <li>Idea2: Forces derived classes to implement a body, empty or not.</li>
  </ol>
  
  <p>What do you, the trusted amazing SO people, think?</p>
  
  <hr>
  
  <p>Edit1: After posting (and reading answers), I realize that assert is bad!</p>
  
  <pre><code>virtual void AMethod3() = {throw (ENotImplemented)};               // 4
  </code></pre>