C++ Standard has an explanation for the difference. The first difference is described in 11.2 Accessibility of base classes and base class members
In the absence of an access-specifier for a base class, public is assumed when the derived class is defined with the class-key struct and private is assumed when the class is defined with the class-key class.
The second difference is described in 11.1 Access specifiers. The explanation is in comments in the example code.
The following code shows this difference.
#include <iostream>
using namespace std;
struct SPerson {
void hello() const {
cout << "hello\n";
}
};
class CPerson {
void hello() const {
cout << "hello\n";
}
};
class Base {
public:
void hello() const {
cout << "hello\n";
}
};
struct SDerived: Base {
};
class CDerived: Base {
};
int main(int argc, const char *argv[]) {
SPerson sp;
sp.hello();
CPerson cp;
cp.hello(); // compile error
SDerived sd;
sd.hello();
CDerived cd;
cd.hello(); // compile error
return 0;
}
http://stackoverflow.com/questions/92859/what-are-the-differences-between-struct-and-class-in-c is a discussion about the difference. Since stackoverflow can't be accessed sometimes in China, I write this post.