If I have for example two classes A and B, such that class B inherits A as follows:
class B: public A
If you use class to define your class, the default access specifier will be private. (I think it's wrong, too.) If you use struct, however, it will be public.
And class definitions are declarations, I think. A statement is what translates into actual code (unless optimized away, anyway).
However, a mildly exotic feature of C and C++ is that expressions are statements. That's why 3+4; is a syntactically legal statement in C++ (although many compilers will warn about it having no effect). While it is obviously nonsense in this case, in general expressions are evaluated for their side effects. (An obvious example is discarding a function's return value. You call the function not to obtain a result, but for its side effects.)