C++静态成员详解

静态成员是解决同一个类的不同对象之间数据和函数共享问题的。

  • 实例属性:一个类的所有对象具有相同的属性,属性值可以不同。
  • 类属性:描述类的所有对象共同特征,对于任何对象其属性值相同。

静态数据成员

  • 用关键字static声明
  • 该类的所有对象维护该成员的同一个拷贝
  • 必须在类外定义和初始化,用(::)来指明所属的类。

类名::标识符

静态成员函数

  • 类外代码可以使用类名和作用域操作符来调用静态成员函数。
  • 也可以直接使用对象名来调用静态成员函数。

静态成员函数可以直接访问该类的静态数据和函数成员。而访问非静态成员必须通过对象名。

例子:具有静态成员函数和静态数据成员的Point类

代码:

#include<iostream>
#include<stdlib.h>
using namespace std;

class Point	//Point类定义
{
public:	//外部接口
	Point(int xx = 0, int yy = 0) { X = xx; Y = yy; countP++; }	//构造函数
	Point(Point &p);	//复制构造函数
	~Point(){ countP--; }
	int GetX() { return X; }
	int GetY() { return Y; }
	static void GetC() { cout << " 对象 id=" << countP << endl; }
	//静态函数成员
private:	//私有数据成员
	int X, Y;
	static int countP;	//静态数据成员引用性说明
};
Point::Point(Point &p)//复制构造函数
{
	X = p.X;
	Y = p.Y;
	countP++;
}

int Point::countP = 0;	//静态数据成员定义性说明
//初始化,使用类名限定
void main()	//主函数实现
{
	Point A(4, 5);	//定义对象A
	cout << "Point A," << A.GetX() << "," << A.GetY();
	A.GetC();	//输出对象号,对象名引用
	Point::GetC();
	Point B(A);	//定义对象B
	cout << "Point B," << B.GetX() << "," << B.GetY();
	Point::GetC();	//输出对象号,类名引用
	system("pause");
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
静态成员是指在类中使用static关键字声明的成员。它们不依赖于类的实例化,而是与类本身相关联。静态成员具有以下几个特点: 1. 静态成员属于类,而不属于类的实例。这意味着无论创建多少个类的实例,静态成员只有一个副本,被所有实例共享。 2. 静态成员可以直接通过类名访问,而无需实例化类对象。例如,可以通过ClassName.staticMember的形式来访问静态成员。 3. 静态成员在类的初始化阶段被创建,并在整个程序的执行过程中存在。它们会在程序启动时进行初始化,直到程序结束时才会被销毁。 4. 静态成员可以访问类的非静态成员,但非静态成员无法直接访问静态成员。这是因为静态成员的存在不依赖于类的实例,而非静态成员的访问需要通过实例化类对象。 5. 静态成员可以用于共享数据或者统计类的实例个数等功能。例如,可以使用一个静态成员变量来记录类的实例数目。 需要注意的是,静态成员在内存中只有一份副本,如果对静态变量进行修改,那么这个修改会对所有实例产生影响。此外,静态成员还可以通过静态成员函数来访问和修改,这些静态成员函数也不依赖于类的实例。 总之,静态成员是与类相关联的成员,具有独特的访问方式和生命周期。它们在编写程序时具有一定的灵活性和实用性,可以用于共享数据和实现功能的统计等方面。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值