title: C++ private and protected virtual method
body: <p>It seems that it is good to make the virtual methods private in order to separate the interfaces for following two clients - 
  1. clients that instantiate an object and call the method
  2. clients that derive from the class and may want to override the method. 
  Simply put - the first client does not need to know if a method is virtual. He will call the base class public non-virtual method which in turn will call the private virtual method. See code below for example. </p>
  
  <p>Now in the case where the virtual method needs to super-message its base class' corresponding virtual method such as say a Save method - which has to pass through all virtual methods in the chain of inheritance in order to save data corresponding to each level of derivation - we have no option but to use a protected virtual method - unless there is a way to guarantee saving of data at all levels of derivation without using super messaging (there is none that I know).</p>
  
  <p>I would like to know if above reasoning correct. </p>
  
  <p>Make sure you use the scroll to see the entire code. </p>
  
  <pre><code>#include &lt;iostream&gt;
  using namespace std;
  
  class A {
  
      string data;    
  
  protected:
  
      virtual void SaveData()= 0;
  
  public:
  
      A():data("Data of A"){}
  
      void Save(){
          cout &lt;&lt; data &lt;&lt; endl;        
          SaveData();
      }
  };
  
  class B : public A {
  
      string data;
  
  protected:
  
      virtual void SaveData() { cout &lt;&lt; data &lt;&lt; endl;}
  
  public:
  
      B():data("Data of B") {}
  
  };
  
  class C : public B {
  
      string data;
  protected:
  
      virtual void SaveData() {
          B::SaveData();
          cout &lt;&lt; data &lt;&lt; endl;
      }
  
  public:
  
      C():data("Data of C") {}
  };
  
  
  int main(int argc, const char * argv[])
  {
      C c;
      c.Save();
  
      return 0;
  }
  </code></pre>