C++ Tutorial/Language Basics/static — различия между версиями
Admin (обсуждение | вклад) м (1 версия: Импорт контента...) |
Admin (обсуждение | вклад) м (1 версия: Импорт контента...) |
(нет различий)
|
Текущая версия на 13:30, 25 мая 2010
Содержание
- 1 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.
- 2 Initialize static member field outside the class declaration
- 3 Use static variable to compute a running average of numbers entered by the user
- 4 Using a static long variable
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>
- 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>
- 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