Nested Class[ref] (needs a reference to enclosing class)
class Outer {
   class Inner {
      public:
         Inner(Outer* o) :outer(o) {}
      private:
         Outer*  outer;
   };
};
[non-static] Nested Class (aka Inner Class or Member Class)
class OuterClass {
    ...
    class InnerClass {
        ...
    }
}
Static Nested Class
class Outer {
   class Inner {
      ...
   };
};
Static Nested Class (aka Static Member Class)[ref]
class OuterClass {
    ...
    static class StaticNestedClass {
        ...
    }
}
(e.g. event handling)
Local Class[ref]
void fun() {
   class Test {
      /* members of Test class */
   };
}
Local Class[ref]
class Test {
    void f() {
        new Thread(new Runnable() {
            public void run() {
                doSomethingBackgroundish();
            }
        }).start();
    }
}
 
                