The default is private inheritance. take this example:
class B { };
class D: B { };
uses private inheritance as its the default. This means that D gets all the protected and public fields and methods that B has (if we actually declared any), but can't be cast to a B. Therefore, this code fails:
void foo(B* argument) {}
foo(new D); //not allowed
If D publicly inherited from B, then a D could be cast to a B, and this function call would be fine.
The second difference is that all the protected and public members in B become private members in D.
What does this actually mean? Public inheritance means D IS_A B, but private inheritance means "is implemented in terms of". Inheriting D from B means you want to take advantage of some of the features in B, but not because D IS_A B or because there's any conceptual connection between B and D. :D