C++ Tutorial/Class/static member functions

Материал из C\C++ эксперт
Перейти к: навигация, поиск

A static member functions

<source lang="cpp">#include <iostream> using namespace std;

class MyClass {

 static int count; 

public:

 MyClass() { 
   count++; 
   cout << "Constructing object " << 
            count << endl; 
 } 

 ~MyClass() { 
    cout << "Destroying object " <<  
            count << endl; 
    count--; 
 } 
 
 static int numObjects() { return count; } 

};

int MyClass::count;

int main() {

 MyClass a, b, c; 

 cout << "There are now " << MyClass::numObjects() << " in existence.\n\n"; 

 MyClass *p = new MyClass(); 

 cout << "there are now " << MyClass::numObjects() << " in existence.\n\n"; 

 delete p; 

 cout << " there are now " << a.numObjects() << " in existence.\n\n"; 

 return 0; 

}</source>

Constructing object 1
Constructing object 2
Constructing object 3
There are now 3 in existence.
Constructing object 4
there are now 4 in existence.
Destroying object 4
 there are now 3 in existence.
Destroying object 3
Destroying object 2
Destroying object 1

name conflicts

<source lang="cpp">/* The following code example is taken from the book

* "C++ Templates - The Complete Guide"
* by David Vandevoorde and Nicolai M. Josuttis, Addison-Wesley, 2002
*
* (C) Copyright David Vandevoorde and Nicolai M. Josuttis 2002.
* Permission to copy, use, modify, sell and distribute this software
* is granted provided this copyright notice appears in all copies.
* This software is provided "as is" without express or implied
* warranty, and with no claim as to its suitability for any purpose.
*/
  1. include <iostream>

int C; class C {

 private:
   int i[2];
 public:
   static int f() {
       return sizeof(C);
   }

}; int f() {

   return sizeof(C);

} int main() {

  std::cout << "C::f() = " << C::f() << ","
            << " ::f() = " << ::f() << std::endl;

}</source>

C::f() = 8, ::f() = 4

Static method and static variable

<source lang="cpp">#include <iostream> using namespace std; class MyClass {

   static int a;
   int b;
 public:
   void set(int i, int j){
     a=i;
     b=j;
   }
   static void show();

}; int MyClass::a; void MyClass::show(){

 cout << "This is static a: " << a << endl;

} int main(void) {

 MyClass x, y;
 x.set(1,1);
 y.set(2,2);
 MyClass::show();
 y.show();
 x.show();

}</source>