static静态在类中的应用

static静态:

        由static修饰的成员属于类,可以直接由类进行调用。(所以用sizeof测量类的大小的时候并不包含静态变量的大小)

一.静态变量:

1.静态变量属于类,所以可以由类直接访问。静态变量存在于每一个对象中其值是所有对象共享的,所以静态变量也存在于对象中。静态变量不依赖于对象,所以也可以通过类的指针进行访问。综上所述:静态变量可以由类,类的对象,类的指针来进行访问。

2.静态变量的声明与初始化:静态变量在成员变量处进行声明与定义,在类外进行初始化。(这就意味着不能再声明时进行初始化、不能通过初始化列表、不能在main函数中进行初始化)要在同一文件出了类域的地方进行初始化,初始化的时候要显示说明是对类中的静态变量进行初始化。

class A
{
public:
	//静态成员也不能再初始化列表中进行初始化
	A(int a)
		:_a(a)
	{}
private:
	int _a = 1; //非静态成员可以赋初始值
public:
	//这里只是为了方便显示结果才将_aa定义为public类型
	static int _aa; //静态成员不能赋初始值
};

 //静态成员的定义要在类外,也不能在main函数中进行,要显示化调用
int A::_aa = 10;

int main()
{
	A a(1);
    A* p = nullptr;
	// 静态成员的调用可以由类也可以由对象也可以由指针
	cout << a._aa << endl;
	cout << A::_aa << endl;
    cout << p->_aa << endl;
	// 编译运行后结果是4,说明静态变量没有保存在对象中,实际上静态变量在静态区
	cout << sizeof(a) << endl;
	return 0;
}

二:静态函数:

1.静态函数的特点:属于成员函数,但是没有this指针,而且只能访问静态变量(非静态函数可以调用静态变量)

 2.对静态函数属于成员函数却没有this指针的解释:

        1静态函数的实现可以不依赖于对象(因为可以由类进行调用)这意味着静态函数可以在没有类实例的情况下被调用。因此,它们不需要访问或操作类的实例数据成员或方法。

        2this是一个隐含的指针,它在类的非静态成员函数中自动提供,指向调用该成员函数的对象实例。静态成员函数不涉及特定的对象实例,因此没有 this 指针。

        3.访问权限:静态函数只能访问静态成员变量和静态成员函数。它们不能访问非静态成员,(因为非静态成员是与对象实例相关的)所以没有必要有this指针。

        4内存分配:静态成员函数在类加载时就被分配内存,而非静态成员函数则是在对象实例创建时才分配。因此,静态成员函数不依赖于特定的对象实例进行调用或操作。

3.静态函数的声明与定义:虽然静态函数的声明与初始化可以不分离,但是在实际过程中并不建议。若声明与定义分离的话,要在类中进行声明,而在类外进行初始化。

class A
{
public:
	A(int a)
		:_a(a)
	{}
	//静态函数的声明与定义可以都在类中,但是并不建议
	static void print1()
	{
		cout << "成功调用定义在类内部的静态函数" << endl;
		cout << _aa << endl;
	}
	static void print2();
private:
	int _a;
	static int _aa;
};

int A::_aa = 10;

 // 静态函数是可以定义在类外的但是不能定义在main函数里面
void A::print2()
{
	cout << "成功调用声明与定义分离的静态函数" << endl;
	cout << _aa << endl;
}

int main()
{
	A a(1);
	A* p = nullptr;
	// 静态成员的调用可以由类也可以由对象也可以由指针
	A::print1();
	a.print1();
	p->print1();

	A::print2();
	a.print2();
	p->print2();
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值