在下面程序中体现了变量的生存期和可见性
#include<iostream>
using namespace std;
int i = 1; //i为全局变量,具有静态生存期
int main()
{
static int a; //a为静态局部变量,具有全局寿命,局部可见
int b = -10; //b,c为局部变量,具有动态生存期
int c = 0;
void other(void);
cout << "-----MAIN-----\n";
cout << "i:" << i << "a:" << a << "b:" << b << "c:" << c << endl;
c = c + 8;
other();
cout << "-----MAIN-----\n";
cout << "i:" << i << "a:" << a << "b:" << b << "c:" << c << endl;
i = i + 10;
other();
}
void other(void)
{
static int a = 2;
static int b;
//a,b为静态局部变量,具有全局寿命,局部可见,只有第一次进入函数时被初始化
int c = 10; //c为局部变量,具有动态生存期,每次进入函数都初始化
a = a +2; i = i +32; c = c + 5;
cout << "------OTHER-----\n";
cout << "i:" << i << "a:" << a << "b:" << b << "c:" << c << endl;
b = a;
}
类的对象之间,的不同属性为对象的“实例属性”。
此外,面向对象方法中还有类属性的概念。如果某个属性为整个类所拥有,则用static关键字来声明为静态成员。
#include<iostream>
using namespace std;
class Point
{
public:
Point(int xx = 0, int yy = 0) {X = xx; Y = yy; countP++; }
Point(Point &p);
~Point() {countP--;}
int GetX() {return X;}
int GetY() {return Y;}
void GetC() {cout << "Objective id =" << countP << endl;}
private:
int X,Y;
static int countP; //静态数据成员声明,用于记录点的个数
};
Point :: Point(Point &p)
{
X = p.X;
Y = p.Y;
countP++; //在构造函数中对countP累加,所有对象共同维护同一个countP
}
int Point :: countP = 0;
int main()
{
Point A(4,5);
cout << "Point A," << A.GetX() << "," << A.GetY();
A.GetC();
Point B(A);
cout << "Point B," << B.GetX() << "," << B.GetY();
B.GetC();
}