Wrestling with more concepts here...

Other than the syntax, there doesn't ssem to be much difference between the aggregation and public inheritance. Pretty much they allow the usage of functions from another class-right?

One can slightly modify the the inherited function but not the aggregated ones?

Why so many ways to do similar things?
I get the feeling that I'm missing some important nuance!

Is this related to C++ only or OOP in general? Because if it is in the general sense, I think this thread is much suited to the Computer Science and Software Design Forum.

Naw, I'm not THAT deep. LOL
I was just wondering why they have two access modes that are so similar. Are there situations that make one more desireable to use than the other?

Its a bit heavy to grasp on your first attempt but try to read this and you will know most of which you want to.