C++ Tutorial/Class/static member functions

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

A static member functions

#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; 
}
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

/* 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.
 */
#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;
}
C::f() = 8, ::f() = 4

Static method and static variable

#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();
}