Question: How can I write C++ code that defines classes, and make corresponding objects accesible to R?

Answer: Here is an example (file oo.cpp). I assume the Borland compiler, but it should be easy to change to your C(++) development environment.

class X 
{
 public: 
 int n;
};

static X x;

extern "C" __declspec(dllexport) 
void setX(int * a)
{
 x.n = *a;
};

extern "C" __declspec(dllexport) 
void getX(int * a)
{
 *a = x.n;
};

This C++ code defines a class X, declares a static instance x of that class, and the  wrapper functions getX and setX make the object accesible to R.

Here is the associated makefile (oo.mak)

oo.dll: oo.cpp
bcc32 -tWD oo.cpp

To recap, the -tWD switch tells bcc32 to produce a DLL for output.

Here is the R side of the interface: (file oo.r)

# MAKE the dll, and load it
if(is.loaded("_getX")) dyn.unload("oo.dll")
shell("make -foo.mak")
dyn.load("oo.dll")

# Define wrapper functions
setX <- function(a)
{
 .C("_setX",as.integer(a))
 return()
}

getX <- function()
{
 .C("_getX",as.integer(0))[[1]]
}

print(getX())
print(setX(42))
print(getX())