首页 > 编程笔记 > C++笔记 阅读:9

C++静态成员变量的用法(附带实例)

现阶段我们定义的类成员都需要通过对象来访问,不能通过类名直接访问。如果将成员变量定义为静态类成员,则允许使用类名直接访问。

静态类成员是在类成员定义前使用 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;
    }
};

相关文章