No, vc doesn't have direct support for OO programming. In particular, there are no classes, structs can't have member functions and there is no such thing as inheritance or polymorphism.
This is mostly because those features are complex, and therefor difficult to implement and hard for new users to understand.
You can use vc in an OO style, much as you can with languages like C. For example, if you have a global array of structs, you can treat each one of those as an object, referenced by its index. You can then create functions like NewMyObject() that return references (ints) to unused objects and functions like DoSomething(int obj) that take in indexes into that large global array and do something with them.
Rather than talk even more about it, here's some example code of what I mean:
struct point { int x, y; int color; int in_use; } #define MAX_POINTS 100 point points[MAX_POINTS]; // first, here's some code that uses this "class" // see how it looks kinda OO-like? // see the functions below for how it works void autoexec() { initPoints(); int p1 = newPoint(2, 3); int p2 = newPoint(4, 5); debugPoint(p1); debugPoint(p2); Log("Distance to origin of p1: " + str( distanceToOrigin(p1))); Log("Distance to origin of p2: " + str( distanceToOrigin(p2))); // add p2 to p1 addPoint(p1, p2); Log("Distance to origin of p1 + p2: " + str(distanceToOrigin(p1))); // clean up deletePoint(p1); deletePoint(p2); } // call before using any other methods void initPoints() { int i; for(i = 0; i < MAX_POINTS; i++) { points[i].in_use = 0; } } // call to get a new point int newPoint(int x, int y) { // go through all of them, looking for one not in use int i; for(i = 0; i < MAX_POINTS; i++) { if(points[i].in_use == 0) { points[i].in_use = 1; // mark as used points[i].x = x; // initialize values points[i].y = y; return i; } } exit("Out of points!"); } // call when done with a point void deletePoint(int p) { if(p < 0 || p >= MAX_POINTS) { exit("Invalid point in deletePoint."); } points[p].in_use = 0; } // call to find the distance to the origin from this point int distanceToOrigin(int p) { if(p < 0 || p >= MAX_POINTS) { exit("Invalid point in distanceToOrigin."); } return sqrt(pow(points[p].x, 2) + pow(points[p].y, 2)); } // adds the values in p2 into p1 void addPoint(int p1, int p2) { if(p1 < 0 || p1 >= MAX_POINTS) { exit("Invalid point in addPoint."); } if(p2 < 0 || p2 >= MAX_POINTS) { exit("Invalid point in addPoint."); } points[p1].x += points[p2].x; points[p1].y += points[p2].y; } // prints out the point void debugPoint(int p) { if(p < 0 || p >= MAX_POINTS) { exit("Invalid point in debugPoint."); } Log("(" + str(points[p].x) + ", " + str(points[p].y) + ")"); }