Structs are made to hold data. They are basically simple data structures.
Classes are meant to be fully functional modules.
What's the word I'm looking for..."programmically", the MAIN (and pretty much only except for the member access specifiers as you mentioned) difference is that classes have the expanded capability of having functions (called methods in OOP talk) inside them, AS WELL as data.
You typically use structs as nodes for more advanced stuff...like creating a binary tree, stack, queue, or heap.
When I was taking mainframe assembly programming my professor told me this...
My professor said that an object file was like a...god what do you call it...um...oh yea, a carburetor. What a carburetor does is actually not important, but (I am no automotive expert) it's supposed to mix fuel with air at a certain ratio so you get the highest percentage of combustion possible.
My point is a carburetor is an object, yes? It is encapsulated in the fact that it has methods, and data (like the fuel to air ratio) and it is fully functional on it's own, but it is useless until you put it in a car. The car doesn't care what the carburetor does, it just cares that it is there...the car does it's business, while the carburetor does it's business.
If you don't understand the concept of modularization, then you should probably look what paradigm means in terms of programming...there are two main versions, top-down (which break down complex problems into smaller manageable functions) and object oriented design (in which modules are designed after real world objects).
Before I go, if you look up object oriented design, make sure you also look up the 3 main characteristics of OOD, which are inheritance, polymorphism, and encapsulation.
Wikipedia has some pretty good stuff on this, look into it. Do the work.