例1 关键字static在类中做静态数据成员与静态局部变量类似
#include<iostream>
using namespace std;
class sumClass
{
private:
int a;
int b;
static int sum;//声明静态数据成员
public:
void sumfunc(int a,int b);
void sumOutput();
};
int sumClass::sum=0;//不同于普通变量,static变量只能在类外定义
void sumClass::sumfunc(int a, int b)
{
sum+=(a+b);
}
void sumClass::sumOutput()
{
cout<<"sum="<<sum<<endl;
}
int main()
{
sumClass s1,s2;
cout<<"s1的和值为:";
s1.sumfunc(1,2);
s1.sumOutput();
cout<<"s2的和值为:";
s2.sumfunc(10,20);
s2.sumOutput();
cout<<"s1的和值为:";
s1.sumOutput();
return 0;
}
运行结果
可用看到s2的和值不是30了,而是33(上次的和3加上这次的30),同样的是s1的和变为了33
例2 在与不带static的做一下比较
#include<iostream>
using namespace std;
class sumClass
{
private:
int a;
int b;
//static int sum;//声明静态数据成员
int sum=0;
public:
void sumfunc(int a,int b);
void sumOutput();
};
//int sumClass::sum=0;//不同于普通变量,static变量只能在类外定义
void sumClass::sumfunc(int a, int b)
{
sum+=(a+b);
}
void sumClass::sumOutput()
{
cout<<"sum="<<sum<<endl;
}
int main()
{
sumClass s1,s2;
cout<<"s1的和值为:";
s1.sumfunc(1,2);
s1.sumOutput();
cout<<"s2的和值为:";
s2.sumfunc(10,20);
s2.sumOutput();
cout<<"s1的和值为:";
s1.sumOutput();
return 0;
}
运行结果
例3 做静态成员函数
它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其余的静态成员函数
#include<iostream>
using namespace std;
class sumClass
{
private:
int a;
int b;
int sum=0;
public:
static void sumfunc(int a,int b);
void sumOutput();
};
//int sumClass::sum=0;//不同于普通变量,static变量只能在类外定义
void sumClass::sumfunc(int a, int b)
{
sum+=(a+b);
}
void sumClass::sumOutput()
{
cout<<"sum="<<sum<<endl;
}
int main()
{
sumClass s1,s2;
cout<<"s1的和值为:";
s1.sumfunc(1,2);
s1.sumOutput();
cout<<"s2的和值为:";
s2.sumfunc(10,20);
s2.sumOutput();
cout<<"s1的和值为:";
s1.sumOutput();
return 0;
}
运行结果出错
因为sum是非静态成员,所以出错
例4 调用静态成员
#include<iostream>
using namespace std;
class sumClass
{
private:
int a;
int b;
static int sum;//声明静态数据成员
public:
static void sumfunc(int a,int b);
void sumOutput();
};
int sumClass::sum=0;//不同于普通变量,static变量只能在类外定义
void sumClass::sumfunc(int a, int b)
{
sum+=(a+b);
}
void sumClass::sumOutput()
{
cout<<"sum="<<sum<<endl;
}
int main()
{
sumClass s1,s2;
cout<<"s1的和值为:";
s1.sumfunc(1,2);
s1.sumOutput();
cout<<"s2的和值为:";
s2.sumfunc(10,20);
s2.sumOutput();
cout<<"s1的和值为:";
s1.sumOutput();
return 0;
}
运行结果
因为sum是静态成员,所以可用调用