一.静态成员属性
定义时在类外定义以及初始化,static关键字在定义和初始化时省略。
#include <iostream>
using namespace std;
class CTest {
public:
int m_a;
static int m_b;
CTest() {
m_a = 1;
cout << m_b << endl;
}
};
int CTest::m_b = 2;
使用:在一般的函数中可以直接使用,是否通过对象都可以使用。
通过对象:对象.静态属性 直接用: 类名::静态属性
int main()
{
cout << CTest::m_b << endl;//在没有对象时,可以通过类名作用域直接调用
cout << sizeof(CTest) << endl;
CTest tst;
cout << tst.m_a << " " << tst.m_b << endl;
system("pause");
return 0;
}
静态成员属性:属于类的,在编译期就存在,一个类只会有一份,被多个对象共享。
CTest tst2;
tst2.m_b = 4;
cout << tst.m_b << endl;
二.静态成员函数
与静态成员属性一样,也是属于类的,在编译期就存在,一个类只会有一份,被多个对象共享。
静态函数由于没有隐藏的this指针参数,无法直接使用类中的一般成员,只能使用静态的。
static void fun() {
cout << m_b << endl;
//cout << m_a << endl;//无法直接使用类中的一般成员
}
在调用函数时:可以通过对象调用也可以通过类名作用域
CTest::fun();
tst2.fun();
三.区别总结:
1.静态函数没有隐藏的this指针参数。
2.无法直接使用类中的一般成员,只能使用静态的静态成员,一般成员既可以使用一般成员又可以使用静态成员。
3.可以通过对象调用也可以通过类名作用域。