title: C++ "Rules" for keyword inclusion in Header file vs Source/Implementation file
body: <p>Must be honest, I am getting confused between what keywords go in the function (and sometimes data member) declarations in the header file, versus what goes in the implementation file. </p>
  
  <p>What is the set of rules to follow? For example</p>
  
  <p>(Updated per comments)</p>
  
  <ul>
  <li>Header files don't contain implementation except if the function is declared as "inline"</li>
  <li>Data members don't contain a default value, unless if the type is static, const, int/enum (unless C++11)</li>
  <li>Public/private/protected usually appear in the header file</li>
  <li>"Static" usually appears in the header file, not the implementation file.</li>
  </ul>
  
  <p>Are thee any other rules I can use to follow? Const?</p>
  
  <p>What about for inheritance? I presume "virtual" only goes in header files? If I inherit virtual functions from Class A into Class B, does the header file of Class B have to declare the virtual functions it overrides? What about a pure virtual function in Class A, when I override in Class B would I have to include the pure virtual function definition in the header file of the derived class?</p>