C++静态成员详解

静态成员

人们希望有一个或者多个数据成员为类的所有对象共同拥有,实现一个类的多个对象之间的数据共享,C++提出了静态成员的概念

如果有全局变量记录,那就破坏了类的封装性

静态数据成员

  • 静态数据成员的定义与普通数据成员相似,但前面需加上关键字static
  • 静态数据成员初始化特殊,需在类外单独初始化,不初始化默认为0
  • 静态数据成员属于类而非某一个对象,所以可以用类名访问 (Score::a)
  • 静态数据成员与静态变量一样,在编译时创建并初始化。它在类的任何对象被建立前就已经存在,因此共有的静态数据成员可以在对象定义之前被访问

声明初始化方法

class Person
{
public:
	Person(){}
private:
	static int sum;// 类内声明 权限也相应的有限制
};

int Person::sum = 10;//类外初始化

类名访问和对象访问

#include <iostream>
using namespace std;

class Person
{
public:
	Person(){}
	static int i;
private:
	static int sum;//类内声明
};

int Person::sum = 10;//类外初始化
int Person::i = 10;
int main()
{
	Person p1,p2;
	cout << p1.i << endl;//10
	cout << p2.i << endl;//10
	cout << Person::i << endl;//10 静态数据成员属于类,可以用类访问

	return 0;
}

静态成员函数

  • 是该类所有对象共享的成员函数,而不属于类中的某个对象(可以使用类名调用)
  • 它的存在专门为了处理静态数据成员(不能访问非静态成员,否则非法)
  • 非静态成员函数有this指针,非静态成员函数无this指针(this指针是指明对象的,但是这是属于类的而非单一对象所有的)
  • 编译系统将静态成员函数限定为内部链接,所以,与现行文件相连接的其他文件中的同名函数不会与该函数发生冲突,维护了该函数使用的安全性,这也是使用静态成员函数的另一个原因
  • 访问非静态成员的方法
    • 对象指针或指针引用
    • 函数参数是类的引用或者指针,这样就可以在静态成员函数内部通过类的形参访问非静态成员了

静态成员函数访问非静态成员

#include <iostream>
using namespace std;

class Person
{
public:
	Person(int age) {
		this->m_age = age;
	}
	static int i;
	static void get(const Person &p) { //用该类的引用或者值访问非静态成员
		cout << p.m_age << endl;
	}
	void get() {
		cout << sum << endl;
	}
private:
	static int sum;
	int m_age;
};

int Person::sum = 10;//类外初始化

int main()
{
	Person p(10);
	p.get(p);	

	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值