目录
1.与静态数据成员不同,静态成员函数的作用不是为了对象之间的沟通,而是为了能够处理静态数据成员
2.静态成员函数只能访问static成员,包括数据成员和成员函数
3.非static成员函数既可以访问static数据成员,也可以访问非static数据成员。static成员函数只能访问satic成员
一.关于静态成员
二.静态数据成员和普通数据成员的共同点
三.为什么要使用静态数据成员
四.关于静态数据成员的初始化
//正确代码举例
#include<iostream>
using namespace std;
class A
{
public:
static int i;
};
int A::i=5;//::表示i是属于A这个类的
int main()
{
A a;
cout<<A::i<<endl;//通过类名加域作用符直接访问
cout<<a.i<<endl;//通过对象访问
return 0;
}
#include <iostream>
using namespace std;
class A
{
public:
static int i;
};
int A::i=9;
int main(){
A a,b;
cout<<a.i<<endl;
cout<<b.i<<endl;
cout<<"----------"<<endl;
b.i=8;
cout<<a.i<<endl;//通过这两行的输出表明a,b两个对象共享内存空间
cout<<b.i<<endl;
return 0;
}
五. 静态成员的访问方式
//访问静态数据成员
#include<iostream>
using namespace std;
class A
{
public:
static int i;
};
int A::i=5;//::表示i是属于A这个类的
int main()
{
A a;
cout<<A::i<<endl;//通过类名加域作用符直接访问
cout<<a.i<<endl;//通过对象访问
A * a1=&a;
cout<<a1->i; //通过对象指针访问数据成员
return 0;
}
//访问静态成员函数
#include <iostream>
using namespace std;
class Box{
public:
static int c;
int a,b;
Box(int x,int y){
a=x;b=y;
}
static void fun(){
cout<<c<<endl;
cout<<"static fun----"<<endl;
}
};
int Box::c=8;
int main(){
Box box(2,3);
Box::fun();//使用作用域运算符直接访问静态成员
box.fun();//通过对象.引用名
Box * box2=&box;
box2->fun(); //通过类Box对象的指针
return 0;
}
六.静态成员函数
1.与静态数据成员不同,静态成员函数的作用不是为了对象之间的沟通,而是为了能够处理静态数据成员
#include<iostream>
using namespace std;
class Box
{
public:
static void fun()
{
cout<<"static---"<<endl;
}
};
int main()
{
Box box1;
box1.fun();
Box::fun();
return 0;
}
2.静态成员函数只能访问static成员,包括数据成员和成员函数
#include <iostream>
using namespace std;
class Box{
public:
static int c;
int a,b;
Box(int x,int y){
a=x;b=y;
}
static void fun(){
cout<<c<<endl;
cout<<"static fun----"<<endl;
}
};
int Box::c=8;
int main(){
Box box(2,3);
box.fun();
Box::fun();
return 0;
}
错误举例:
class Box{
public:
static int c;
int a,b;
Box(int x,int y){
a=x;b=y;
}
static void fun(){
cout<<a<<endl;
cout<<"static fun----"<<endl;
}
};
3.非static成员函数既可以访问static数据成员,也可以访问非static数据成员。static成员函数只能访问satic成员
#include <iostream>
using namespace std;
class Box{
public:
static int c;
int a,b;
Box(int x,int y){
a=x;b=y;
}
void fun(){
cout<<a<<" "<<c<<endl;
cout<<"static fun----"<<endl;
}
};
int Box::c=8;
int main(){
Box box(2,3);
box.fun();//通过对象.引用名
return 0;
}