C++ 类的静态成员以及静态成员函数

关键字static可以用于说明一个类的成员或函数,当把一个类的成员说明为static时,无论这个类创建了多少对象,这些对象都共享这个static成员。


静态成员与静态成员函数都属于整个类,并不属于对象的。

调用静态成员(变量/函数)
类名::成员();


静态成员函数不能直接调用非静态成员:

以下文字与理解摘自 来自:https://www.cnblogs.com/MATU/p/3818163.html

例如:

#include "iostream"
using namespace std;
class test
{
private:
     int x;
     int y;
public:
     static int num;
     static int Getnum()
     {
          x+=5;   // 这行代码是错误的,静态成员函数不能调用非静态数据成员,要通过类的对象来调用。
          //而访问非静态数据成员必须通过参数传递的方式得到一个对象名,然后通过对象名来访问。
          num+=15;
          return num;
     }
};
int test::num = 10;
int main(void)
{
     test a;
     cout<<test::num<<endl;        //10
     test::num = 20;
     cout<<test::num<<endl;        //20
     cout<<test::Getnum()<<endl;   //35
     cout<<a.Getnum()<<endl;       //50
     system("pause");
     return 0;
}

静态成员函数可以直接访问该类的静态数据和函数成员,而访问非静态数据成员必须通过参数传递的方式得到一个对象名,然后通过对象名来访问。

总结:
1、static成员的所有者是类本身和对象,但是多有对象拥有一样的静态成员。从而在定义对象是不能通过构造函数对其进行初始化。
2、静态成员不能在类定义里边初始化,只能在class body外初始化,出现在类体外的函数定义不能指定关键字static。
3、静态成员仍然遵循public,private,protected访问准则。
4、静态成员函数没有this指针,它不能返回非静态成员,因为除了对象会调用它外,类本身也可以调用。
5.静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;
6.非静态成员函数可以任意地访问静态成员函数和静态数据成员;
7.静态成员函数不能访问非静态成员函数和非静态数据成员;
8.由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值