Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Class variable
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{short description|Variable defined in a class whose objects all possess the same copy}} In [[class-based]], [[object-oriented programming]], a '''class variable''' is a [[Variable (programming)|variable]] defined in a [[Class (computer programming)|class]] of which a single copy exists, regardless of how many [[Instance (computer science)|instance]]s of the class exist.<ref name=TheJavaTurotialVariables>{{cite web|url=http://download.oracle.com/javase/tutorial/java/nutsandbolts/variables.html|title=The Java Tutorial, Variables |accessdate=2010-10-21}}</ref><ref name=TheJavaTutorialUnderstandingInstanceAndClassMembers>{{cite web|url=http://download.oracle.com/javase/tutorial/java/javaOO/classvars.html|title=The Java Tutorial, Understanding Instance and Class Members|accessdate=2010-10-21}}</ref><ref name=ThePythonLanguageReferenceCompoundStatements>{{cite web|url=https://docs.python.org/reference/compound_stmts.html#class-definitions|title=The Python Language Reference, Compound Statements|accessdate=2010-10-21}}</ref><ref name=ObjectiveCRuntimeReference>{{cite web|url=https://developer.apple.com/documentation/objectivec/objective_c_runtime|title= Objective-C Runtime Reference |website=Apple Developer|accessdate=1 April 2018}}</ref><ref name=ClassVariablesinCSharp>{{cite web|title=Class Variables in C#|url=https://syntaxdb.com/ref/csharp/class-var|website=Syntaxdb|accessdate=1 April 2018}}</ref> A class variable is not an [[instance variable]]. It is a special type of [[Class (computer science)#Structure|class attribute]] (or class property, [[Field (computer science)|field]], or data member). The same dichotomy between ''instance'' and ''class'' members applies to [[method (computer science)|method]]s ("member functions") as well; a class may have both [[instance method]]s and [[class method]]s. ==Static member variables and static member functions== {{see also|Static method}} In some languages, class variables and class methods are either statically resolved, not via [[dynamic dispatch]], or their memory [[static memory allocation|statically allocated]] at compile time (once for the entire class, as [[static variable]]s), not dynamically allocated at run time (at every instantiation of an object). In other cases, however, either or both of these are dynamic. For example, if classes can be dynamically defined (at run time), class variables of these classes are allocated dynamically when the class is defined, and in some languages class methods are also dispatched dynamically. Thus in some languages, '''static member variable''' or '''static member function''' are used synonymously with or in place of "class variable" or "class function", but these are not synonymous across languages. These terms are commonly used in [[Java (programming language)|Java]], [[C Sharp (programming language)|C#]],<ref name=ClassVariablesinCSharp/> and [[C++]], where class variables and class methods are declared with the [[Static (keyword)|<code>static</code> keyword]], and referred to as '''static member variables''' or '''static member functions'''. ==Examples== === C++ === <syntaxhighlight lang="cpp" line="1"> struct Request { static int count; int number; Requestobject() { number = count; // modifies the instance variable "this->number" ++count; // modifies the class variable "Request::count" } }; int Request::count = 0; </syntaxhighlight> In this C++ example, the class variable <code>Request::count</code> is [[increment operator|incremented]] on each call to the [[constructor (computer science)|constructor]], so that <code>Request::count</code> always holds the number of Requests that have been constructed, and each new Request object is given a <code>number</code> in sequential order. Since <code>count</code> is a class variable, there is only one object <code>Request::count</code>; in contrast, each Request object contains its own distinct <code>number</code> field. Also note that the variable <code>Request::count</code> is initialized only once. === Python === <syntaxhighlight lang="python"> class Dog: vertebrate_group = 'mammals' # class variable dog_1 = Dog print(dog_1.vertebrate_group) # accessing the class variable </syntaxhighlight>In the above Python code, it does not provide much information as there is only class variable in the Dog class that provide the vertebrate group of dog as mammals. In instance variable, you could customize your own object (in this case, dog_1) by having one or more [[instance variable]]s in the Dog class. ==Notes== {{Reflist|2}} {{DEFAULTSORT:Class Variable}} [[Category:Object-oriented programming]] [[Category:Variable (computer science)]] [[Category:Articles with example C++ code]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Cite web
(
edit
)
Template:Reflist
(
edit
)
Template:See also
(
edit
)
Template:Short description
(
edit
)