C++的static关键字用法以及单实例化模型

一、简述:
C++中static关键字可以用来修饰类成员变量以及类成员函数。虽然修饰类成员变量和类成员函数的功能不一样。但是都有一个共同点,被static修饰的变量或者是函数都是属于类所有,并不属于某个对象。
二、static修饰类成员变量:
1、被static修饰的类成员变量与其它普通变量无论是在初始化、存储位置、使用、所属等都有很大的差异。
⑴被static修饰的类成员变量存储在.data段上;而普通的类成员变量存储在栈或堆上(具体视对象定义的情况而定)。
⑵既然静态成员变量是属于类,而不属于具体的某个对象,所以在初始化上并不能像普通的成员变量能够在构造函数、拷贝构造函数、构造函数的初始化列表上对其进行初始化,可以在类内初始化和类外初始化如:

class demo{

private:
	static int member;	//仅是声明。
	static int count = 20;	//类内初始化。
};
int demo::member = 100;   //类外初始化,但是需要在内类声明

⑶静态变量使用如下:

#include <iostream>
using namespace std;
class demo
{
	public:
		demo(int n):n_member(10){
			}
		int get_member();
		static int s_member = 10;
		int n_member;
};
int main()
{
	demo a(10);
	cout << a.n_member << endl;		
	cout << a.s_member << endl; //该使用方式是错的,静态成员并不属于具体的对象。
	cout << demo::s_member << endl; //该使用方法是正确的。
	return 0;
}

三、static修饰的方法:
⑴static修饰的方法,也是属于类;而不是属于具体某个对象。static修饰的方法,只能访问由static修饰的成员变量、以及调用static修饰的方法。不能访问普通的类成员变量,以及类方法。例如:

class demo{
	public:
		int get_member();
		static int get();
		static void set(int s);
	private:
		static int s_member;
		int n_member;
};
int demo::s_member = 10;
int demo::get_member()
{
	return n_member;
}

void demo::set(int s){
	s_member = 10;
}

int demo::get()
{
	set(20);
	return get_member(); //该用法是错误
}

针对为什么static修饰的成员变量以及函数不能和普通的变量和函数混合使用,原因有两点:
①:他们的属主不同,静态变量以及静态方法属于类。而普通变量以及方法是属于对象。所以不能混合使用。
②:他们存储的空间不同导致(上述这两种方法是个人联想的。)

四、单实例化模型:

class demo{
publicstatic demo* demo_init()
	{
		if(s1 != NULL){
			return NULL;
		}
		s1 = new demo;
		return s1;
	}

private:
	/*需要在私有属性下,将构造函数、拷贝构造函数重新实现一次。防止实例化的时候调用类的公有的构造函数以及拷贝构造函数。*/
	demo(){
	}
	demo(demo& another)
	{
	}
	demo & operator =(const demo& another){
	}
	demo *s1;
};

int main()
{
	demo s = demo::demo_init();
	return 0;
}
/*使用该方法,可以保证整个工程里,仅有一个demo类的实例。*/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值