C++静态成员变量的用法(附带实例)
现阶段我们定义的类成员都需要通过对象来访问,不能通过类名直接访问。如果将成员变量定义为静态类成员,则允许使用类名直接访问。
静态类成员是在类成员定义前使用 static 关键字,例如:
定义静态成员变量后,通常需要在类体外部对其进行初始化。例如:
静态成员变量不仅可以通过对象访问,还可以直接使用类名访问。例如:
一个类中,静态成员变量可被所有的类对象共享,即无论定义多少个类对象,静态成员变量都只有一个。如果静态成员变量被修改,则所有对象的静态成员变量都将发生改变。
对于静态成员变量,需要注意以下两点:
1) 静态类成员变量可以是当前类的对象,非静态类成员只能是当前类的指针或应用类型。例如:
2) 静态成员变量可作为类成员函数的默认参数,普通成员变量则不允许作为成员函数的默认参数。例如:
静态类成员是在类成员定义前使用 static 关键字,例如:
class CBook { public: static unsigned int m_Price; // 定义静态成员变量 m_Price };
定义静态成员变量后,通常需要在类体外部对其进行初始化。例如:
unsigned int CBook::m_Price = 10; // 初始化静态成员变量 m_Price
静态成员变量不仅可以通过对象访问,还可以直接使用类名访问。例如:
int main(int argc, char *argv[]) { CBook book; // 定义CBook类的对象book cout << CBook::m_Price << endl; // 通过类名访问静态成员变量 cout << book.m_Price << endl; // 通过对象访问静态成员变量 return 0; }
一个类中,静态成员变量可被所有的类对象共享,即无论定义多少个类对象,静态成员变量都只有一个。如果静态成员变量被修改,则所有对象的静态成员变量都将发生改变。
对于静态成员变量,需要注意以下两点:
1) 静态类成员变量可以是当前类的对象,非静态类成员只能是当前类的指针或应用类型。例如:
class CBook // 定义CBook类 { public: static unsigned int m_Price; // 定义静态成员变量 m_Price CBook m_Book; // 非法定义,非静态成员变量 m_Book 不能是 CBook 类的对象 static CBook m_VCbook; // 正确,静态成员变量 m_VCbook 可以是 CBook 类的对象 CBook *m_pBook; // 正确,非静态成员变量 m_pBook 可以是 CBook 类的指针 };
2) 静态成员变量可作为类成员函数的默认参数,普通成员变量则不允许作为成员函数的默认参数。例如:
class CBook // 定义CBook类 { public: static unsigned int m_Price; // 定义静态成员变量 m_Price int m_Pages; // 定义普通成员变量 m_Pages void OutputInfo(int data = m_Price) // 成员函数 OutputInfo(),静态成员变量 m_Price 为默认参数 { cout << data << endl; } void OutputPage(int page = m_Pages) // 非法定义,普通成员变量 m_Pages 不能是成员函数的默认参数 { cout << page << endl; } };