A C++ struct is actually an extension of the C language struct in that the ability to specify methods is added. In fact, the only difference between a struct and a class in C++ is that by default the latter's members and base classes are private, whereas in a struct, by default the members and bases are public. An example of a declaration for a C++ struct is:
SomeStruct() and ~SomeStruct() are the constructor and destructor, respectively, and someMethod() is a method of the struct. All members are public since no visibility is specified.
One could create an instance of this struct by declaring it like so on the stack:
SomeStruct thisStruct;
You could then access the methods of thisStruct like so:
C++ introduced const, which is a very powerful tool for avoiding programmer logic and design errors.
Using C++ casts will make it clearer what your intention is for a cast and force you to think about and understand why the types don't match, which are both good things.
In fact, C-style cast is defined by the C++ Standard simply as the first cast to succeed in an increasingly-unsafe sequence of C++ casts.
C++ supports this (via member functions and friend functions), but does not enforce it: the programmer can declare parts or all of the representation of a type to be public, and is also allowed to make public entities that are not part of the representation of the type.
This is partly because the C++ grammar is not LALR(1).
C++ is sometimes compared unfavorably with single-paradigm object-oriented languages such as Java, on the basis that it allows programmers to "mix and match" object-oriented and procedural programming, rather than strictly enforcing a single paradigm.