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;
}
};
ICP备案:
公安联网备案: