0
点赞
收藏
分享

微信扫一扫

静态数据成员和静态成员函数(static)

钵仔糕的波波仔 2022-05-02 阅读 46

目录

一.关于静态成员 

二.静态数据成员和普通数据成员的共同点 

三.为什么要使用静态数据成员

四.关于静态数据成员的初始化

五. 静态成员的访问方式 

 六.静态成员函数

1.与静态数据成员不同,静态成员函数的作用不是为了对象之间的沟通,而是为了能够处理静态数据成员

2.静态成员函数只能访问static成员,包括数据成员和成员函数

3.非static成员函数既可以访问static数据成员,也可以访问非static数据成员。static成员函数只能访问satic成员

4.静态成员函数不与任何对象绑定在一起,不包含this指针 


一.关于静态成员 

二.静态数据成员和普通数据成员的共同点 

三.为什么要使用静态数据成员

四.关于静态数据成员的初始化

//正确代码举例
#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;
} 

4.静态成员函数不与任何对象绑定在一起,不包含this指针 

举报

相关推荐

0 条评论