Static members of a class: _Static_ has a third meaning inside a class. A static data member of a class is a data member that belongs to the class, not to an individual object within the class. For example, in an Order class, a static data member could be used to represent the total number of orders. class Order: { ... private: static int order_count; ... } A static function member in a class can only be used to update static data members. Since static data members belong to the class rather than to a specific object, they are referred to as classname::name rather than as object.name. For the same reason, a static data member must be initialized globally rather than in a function updating a particular object, for example: int Order::order_count = 0; A good place to put this initialization is directly above the function definitions in the Order.cc file. -- Constant members of a class: When constants are related to a specific class, they can be defined inside the class. Constant data members of a class should always be declared as static, since only one copy of a constant (as opposed to one per object) is needed. For example: class Order: { ... private: static float tax_rate; ... } A static const data member must be initialized globally like any other static data member. In addition, since it is a constant, its value cannot later be changed. For example: const float Order::tax_rate = .0575; Note that 'const' is included in the declaration and the initialization, but 'static' is only included in the declaration. If the constant item is an array, all of the values needed must be given, as in the following example: In Order.h: static const float tax_rates[3]; In Order.cc: const float Order::tax_rates[3] = {.0575, .0675, .0875};