C++ Tutorial/Language Basics/static — различия между версиями

Материал из C\C++ эксперт
Перейти к: навигация, поиск
м (1 версия: Импорт контента...)
 
м (1 версия: Импорт контента...)
 
(нет различий)

Текущая версия на 13:30, 25 мая 2010

A static local variable causes the compiler to create permanent storage for it in much the same way that it does for a global variable.

<source lang="cpp">#include <stdio.h>

  1. include <conio.h>

int count(int i);

int main(void) {

 do {   
   count(0);   
 } while(!kbhit());   
 printf("count called %d times", count(1));   
 return 0;   

}

int count(int i) {

 static int c=0;   
    
 if(i) return c;   
 else c++;   
 return 0;   

}</source>

Initialize static member field outside the class declaration

<source lang="cpp">#include <iostream> using std::cout; using std::endl; class Box {

 public:
   Box() {
     cout << "Default constructor called" << endl;
     ++objectCount;
     length = width = height = 1.0;
   }
   Box(double lvalue, double wvalue, double hvalue) :
                             length(lvalue), width(wvalue), height(hvalue) {
     cout << "Box constructor called" << endl;
     ++objectCount;
   }
   double volume() const {
     return length * width * height;
   }
   int getObjectCount() const {return objectCount;}
 private:
   static int objectCount;
   double length;
   double width;
   double height;

}; int Box::objectCount = 0; int main() {

 cout << endl;
 Box firstBox(17.0, 11.0, 5.0);
 cout << "Object count is " << firstBox.getObjectCount() << endl;
 Box boxes[5];
 cout << "Object count is " << firstBox.getObjectCount() << endl;
 cout << "Volume of first box = "
      << firstBox.volume()
      << endl;
 const int count = sizeof boxes/sizeof boxes[0];
 cout <<"The boxes array has " << count << " elements."
      << endl;
 cout <<"Each element occupies " << sizeof boxes[0] << " bytes."
      << endl;
 for(int i = 0 ; i < count ; i++)
   cout << "Volume of boxes[" << i << "] = "
        << boxes[i].volume()
        << endl;
 return 0;

}</source>

Box constructor called
Object count is 1
Default constructor called
Default constructor called
Default constructor called
Default constructor called
Default constructor called
Object count is 6
Volume of first box = 935
The boxes array has 5 elements.
Each element occupies 24 bytes.
Volume of boxes[0] = 1
Volume of boxes[1] = 1
Volume of boxes[2] = 1
Volume of boxes[3] = 1
Volume of boxes[4] = 1

Use static variable to compute a running average of numbers entered by the user

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

int f(int i);

int main() {

 int num; 

 do { 
   cout << "Enter numbers (-1 to quit): "; 
   cin >> num; 
   if(num != -1) 
     cout << "average is: " << f(num) << "\n"; 
   
 } while(num > -1); 

 return 0; 

}

int f(int i) {

 static int sum = 0, count = 0; 

 sum = sum + i; 

 count++; 

 return sum / count; 

}</source>

Enter numbers (-1 to quit): 1
average is: 1
Enter numbers (-1 to quit): 2
average is: 1
Enter numbers (-1 to quit): 3
average is: 2
Enter numbers (-1 to quit): 2
average is: 2
Enter numbers (-1 to quit): 1
average is: 1
Enter numbers (-1 to quit): 2
average is: 1
Enter numbers (-1 to quit): 3
average is: 2
Enter numbers (-1 to quit): -1

Using a static long variable

<source lang="cpp">#include <iostream>

  1. include <iomanip>

using std::cout; using std::endl; long next(); int main() {

 for(int i = 0 ; i < 30 ; i++) {
   cout << std::setw(12) << next ();
 }
 cout << endl;
 return 0;

} long next () {

 static long last = 0;
 last = last + 1;   
 return last;

}</source>

1           2           3           4           5           6
   7           8           9          10          11          12          13
      14          15          16          17          18          19          20
          21          22          23          24          25          26
  27          28          29          30