class keyword

class keyword Declares a class or template parameter, or elaborates a type name

class-specifier ::= class-head { [member-specification] }

class-head ::= class-key [identifier] [base-clause] | 

    class-key nested-name :: identifier [base-clause] |

    class-key [nested-name ::] template-id [base-clause] class-key ::= class | 

    struct | union

member-specification ::= member-decl [member-specification] | 

    access-specifier : [member-specification]

member-decl ::= [decl-specifier-seq] [member-declarator-list] ; | 

    function-definition [;] | qualified-id ; | using-decl | template-decl

member-declarator-list ::= member-declarator | 

    member-declarator-list , member-declarator

member-declarator ::= declarator [= 0] | declarator [= constant-expression] |

    [identifier] : constant-expression

base-clause ::= : base-specifier-list

base-specifier-list ::= base-specifier | base-specifier-list , base-specifier

base-specifier ::= [base-modifiers] [::] [nested-name ::] class-name

base-modifiers ::= virtual [access-specifier] | access-specifier [virtual]

access-specifier ::= private | protected | public

class-name ::= identifier | template-id

type-parm := class [identifier] [= type-id] | 

    template < template-parm-list > class [identifier] [= id-expression]

elaborated-type-specifier := class-key [::] [nested-name ::] identifier | 

    class-key [::] [nested-name ::] [template] template-id

The class keyword introduces a class declaration or definition, names a type template parameter (type-parm), or names a class type in an elaborated-type-specifier. In a class definition, the only difference between class and struct is that the default access level is private for class and public for struct.

When declaring a type template parameter, typename and class are interchangeable.

Example

template<class T> // Can use typename instead of class

class point {

public:

  point(T x = 0, T y = 0);

private:

  T x_, y_;

};

point<int> pt1;

class point<int> pt2; // redundant use of class

See Also

declaration, declarator, expression, function, identifier, private, protected, public, struct, template, type, typename, union, virtual, Chapter 6, Chapter 7