static int 和 int (静态与非静态)的区别:
- 生存期不同,普通变量在离开他的作用域后,存储空间释放,对象消亡
- 用static修饰的变量,生存期为整个程序,即离开它的作用域后,它仍然存在
- 静态变量的初始化只有在第一次使用时才会生效
类的静态变量成员:
- 用关键字static声明,要在类外定义和初始化,用(::)来指明所属的类,例如int Point::sum = 0(Point是类名)
- 被该类的所有对象共享,生存期为整个程序
类的静态函数成员:
- 直接使用类名和作用域操作符来调用静态成员函数,例如Point::Count();
- 不能直接访问非静态成员,因为程序不能知道你想访问那个对象,除非你传递参数告知编译器
样例:(代码中有注释)
#include<iostream>
#include<cmath>
using namespace std;
class Point
{
public:
Point(int a, int b): x(a), y(b) { sum++; }
Point(const Point &b)
{
x = b.x, y = b.y;
sum++;
}
~Point() { sum--; }
int Getx() { return x; };
int Gety() { return y; };
static void Count() { cout<<sum<<endl; };
static int Getdis(const Point &b) { return b.x*b.x+b.y*b.y; } //返回b点与坐标原点的距离
private:
int x, y;
static int sum; //静态变量声明,sum表示当前有多少个Point类的对象,即点的个数
};
int Point::sum = 0; //类的静态成员初始化方法
int main(void)
{
Point a(3, 4);
Point b(a);
Point::Count(); //调用类的静态函数,输出当前有多少个点的对象,答案2
cout<<'('<<b.Getx()<<", "<<b.Gety()<<')'<<endl;
cout<<sqrt(Point::Getdis(b))<<endl;
return 0;
}