--- title: "class (C++)" ms.date: "11/04/2016" f1_keywords: ["class_cpp"] helpviewer_keywords: ["class types [C++], class statements", "class keyword [C++]"] ms.assetid: dd23c09f-6598-4069-8bff-69c7f2518b9f --- # class (C++) The **class** keyword declares a class type or defines an object of a class type. ## Syntax ``` [template-spec] class [ms-decl-spec] [tag [: base-list ]] { member-list } [declarators]; [ class ] tag declarators; ``` #### Parameters *template-spec*
Optional template specifications. For more information, refer to [Templates](templates-cpp.md). *class*
The **class** keyword. *ms-decl-spec*
Optional storage-class specification. For more information, refer to the [__declspec](../cpp/declspec.md) keyword. *tag*
The type name given to the class. The tag becomes a reserved word within the scope of the class. The tag is optional. If omitted, an anonymous class is defined. For more information, see [Anonymous Class Types](../cpp/anonymous-class-types.md). *base-list*
Optional list of classes or structures this class will derive its members from. See [Base Classes](../cpp/base-classes.md) for more information. Each base class or structure name can be preceded by an access specifier ([public](../cpp/public-cpp.md), [private](../cpp/private-cpp.md), [protected](../cpp/protected-cpp.md)) and the [virtual](../cpp/virtual-cpp.md) keyword. See the member-access table in [Controlling Access to Class Members](member-access-control-cpp.md) for more information. *member-list*
List of class members. Refer to [Class Member Overview](../cpp/class-member-overview.md) for more information. *declarators*
Declarator list specifying the names of one or more instances of the class type. Declarators may include initializer lists if all data members of the class are **public**. This is more common in structures, whose data members are **public** by default, than in classes. See [Overview of Declarators](../cpp/overview-of-declarators.md) for more information. ## Remarks For more information on classes in general, refer to one of the following topics: - [struct](../cpp/struct-cpp.md) - [union](../cpp/unions.md) - [__multiple_inheritance](../cpp/inheritance-keywords.md) - [__single_inheritance](../cpp/inheritance-keywords.md) - [__virtual_inheritance](../cpp/inheritance-keywords.md) For information on managed classes and structs in C++/CLI and C++/CX, see [Classes and Structs](../extensions/classes-and-structs-cpp-component-extensions.md) ## Example ```cpp // class.cpp // compile with: /EHsc // Example of the class keyword // Exhibits polymorphism/virtual functions. #include #include #define TRUE = 1 using namespace std; class dog { public: dog() { _legs = 4; _bark = true; } void setDogSize(string dogSize) { _dogSize = dogSize; } virtual void setEars(string type) // virtual function { _earType = type; } private: string _dogSize, _earType; int _legs; bool _bark; }; class breed : public dog { public: breed( string color, string size) { _color = color; setDogSize(size); } string getColor() { return _color; } // virtual function redefined void setEars(string length, string type) { _earLength = length; _earType = type; } protected: string _color, _earLength, _earType; }; int main() { dog mongrel; breed labrador("yellow", "large"); mongrel.setEars("pointy"); labrador.setEars("long", "floppy"); cout << "Cody is a " << labrador.getColor() << " labrador" << endl; } ``` ## See also [Keywords](../cpp/keywords-cpp.md)
[Classes and Structs](../cpp/classes-and-structs-cpp.md)