静态成员:被static修饰的成员变量\函数

静态成员变量

}



 ```Swift
class Car {
public:
    static int m_price;
    void run() {
        cout << "run()" << endl;
    }
};

// 初始化静态成员变量
int Car::m_price = 0;

访问静态成员变量示例

int main() {
    Car car;
    car.m_price = 10;

    // 1.使用对象.访问
    Car car2;
    car2.m_price = 20;

    // 2.使用类名::访问
    Car::m_price = 30;
    
    // 3.使用对象指针访问
    Car *p = new Car();
    p->m_price = 40;

    Car car3;
    cout << car3.m_price << endl;

    getchar();
    return 0;
}

静态成员变量经典示例

class Car {
// class默认就是私有,防止外界修改
private:
    static int m_count;
public:
    Car() {
        m_count++;
    }
    ~Car() {
        m_count--;
    }
    
    // 静态成员函数:方便外界通过类名访问,不需要创建对象
    // 提供一个获取m_count值的方法
    static int getCount() {
        return m_count;
    }
};

// 静态成员变量初始化
int Car::m_count = 0;

外界调用

int main() {
    Car car1;
    Car car2;
    Car *p = new Car();
    delete p;
    
    // 通过对象函数访问
    cout << car1.getCount() << endl;
    // 通过类名访问静态函数
    cout << Car::getCount() << endl;

    /*Car car1;
    car1.m_count = 10;
    car1.getCount();

    p->m_count = 10;
    p->getCount();

    Car::m_count = 20;
    Car::getCount();*/

    getchar();
    return 0;
}

思考如下代码打印什么?

class Person {
public:
	static int ms_count;
};
// 继承Person
class Student : public Person {
    
};
// 初始化静态成员变量
int Person::ms_count = 0;
int main() {

	Person::ms_count = 20;
	Student::ms_count = 10;

	cout << Person::ms_count << endl;

	getchar();
	return 0;
}

结果是10,静态成员变量在内存中只有一份

如果对象一个成员变量都没有,那么创建的对象占用1个字节

静态成员变量:全局区,也就是数据段

函数都在代码区,函数的调用时根据函数的地址call调用

静态成员变量规范

ms_count // m: member s: static