   Naming classes
  I am trying to think of a good way to do this. Normally I name my classes LikeThis, and I pass them to functions like this, void f(Thing & thing); Now if I wanted the class name to be lowercase, I would have a problem with what to name the function argument. So I can''t decide what to do. Maybe I''ll name it class thing_t. Or I guess I could do all caps for type names. Hmmm. 
  If the functions takes just a few arguments I sometimes just name them with a single letter letter.  So maybe, void f(Thing & T).  Or how about: void f(Thing& AThing), or: void f(Thing& TheThing). ;  I''d suggest naming abstract classes "ISomething", and concrete classes that implement at least one interface (derives from at least one abstract) "CSomething". Classes that are value types should not have I or C prefixes. Classes that are NOT value types should always derive from at least one interface.You can name arguments starting with "i" "o" or "io" for whether it''s an input, output, or in/out argument.You can name members using "m" or "m_" to tell them apart from arguments.But what about locals? :-) ;Code Complete-- an excellent book. 