The idea of a structure is to group together a collection of variables into a single container. E.g. if you have three coordinates
you might want to see them as a unit of data and group them together:
You can see this as a way to modularize your data.
Now you can define variables containing all three values in one unit:
struct point p1, p2;
In procedural programming, you have procedures or functions that manipulate data and, in particular, structures, e.g.
void shiftX(struct point *p, int offset);
You can call the function on a struct by passing it as an argument:
The step from structs to classes is to say that procedures / functions should be grouped together with data into units: like structs classify entities that have the same structure, classes classify entities that have the same structure and operations.
So now you can write:
void shiftX(int offset);
In this way it is easier to group together operations that work on the same kind of data. E.g. you can group together all operations that act on points
in the class definition, instead of having them scattered over your code as
functions that have one or more parameters of type point.
Additionally, you can refine both structure and behaviour by using inheritance.
Summarizing: structs are a concept that allows to organize / modularize data. Classes allow to organize / modularize both data and operations.