type checking is stricter in C++, you are not allowed to simply assign a void* to any other type(C allow this).
C compiler can assume that a function you call with an in argument has an argument list containing int, even if it may actually contain a float. in C, the external references that the linker searches for are simply function names without types of the argument. you define a func(float) and call func(int) then at the calling location an int is pushed onto the stack, but the func() body will expect a float to be on the stack.
Instead of requiring you to create a typedef, the C++ compiler turns the name of the structure into a new type name for the program.
In C++, you cannot call a function without declaring it first.
the variables are all defined "on the fly", that is, they are defined at any point in the scope, rather than being restricted to the beginning of the scope.
object oriented programming can be summed up in a single phrase: sending messages to objects.
structs with no data members will always have some minimum nonzero size.(1 byte in my machine)
what you can put into header files? the basic rule is "only declarations".
DON'T put using directives in header file.
calling delete for a void* doesn't clean things properly.(details in Chapter13)