CPlusPlus - #013 静态变量和静态函数

mutable的用法

1 目标

本文的目的是了解静态变量和静态函数的用法。
可以把静态理解为全局

2 示例代码

  • 静态成员函数: 不能访问非静态成员变量和非静态成员函数。
  • 非静态成员函数: 可以访问静态成员变量,并且可以调用静态成员函数。
#include <iostream>

class MyClass {
private:
    static int staticVar;  // 静态成员变量
    int nonStaticVar;      // 非静态成员变量

public:
    MyClass(int val) : nonStaticVar(val) {}

    // 静态成员函数
    static void setStaticVar(int value) {
        staticVar = value;
        // 静态成员函数不能访问非静态成员变量和非静态成员函数
        // nonStaticVar = value; // 错误,不能访问非静态成员变量
        // setNonStaticVar(value); // 错误,不能调用非静态成员函数
    }

    // 静态成员函数
    static int getStaticVar() {
        return staticVar;
    }

    // 非静态成员函数
    void setNonStaticVar(int value) {
        nonStaticVar = value;
    }

    // 非静态成员函数
    int getNonStaticVar() const {
        return nonStaticVar;
    }

    // 非静态成员函数
    void printValues() const {
        std::cout << "非静态变量的值: " << nonStaticVar << std::endl;
        std::cout << "静态变量的值: " << staticVar << std::endl;
        // 非静态成员函数可以访问静态成员变量和调用静态成员函数
        std::cout << "通过静态成员函数获取的静态变量的值: " << getStaticVar() << std::endl;
    }

    // 非静态成员函数调用静态成员函数
    void callStaticFunction() const {
        std::cout << "在非静态成员函数中调用静态成员函数设置静态变量。" << std::endl;
        setStaticVar(300); // 可以调用静态成员函数
    }
};

// 静态成员变量定义和初始化
int MyClass::staticVar = 0;

int main() {
    MyClass obj1(10);
    MyClass obj2(20);

    // 使用类名调用静态成员函数
    MyClass::setStaticVar(100);
    std::cout << "静态变量的值: " << MyClass::getStaticVar() << std::endl;  // 输出: 静态变量的值: 100

    // 使用对象调用非静态成员函数
    obj1.setNonStaticVar(30);
    std::cout << "obj1 的非静态变量的值: " << obj1.getNonStaticVar() << std::endl;  // 输出: obj1 的非静态变量的值: 30

    obj2.setNonStaticVar(40);
    std::cout << "obj2 的非静态变量的值: " << obj2.getNonStaticVar() << std::endl;  // 输出: obj2 的非静态变量的值: 40

    // 静态变量在类的所有实例中共享
    MyClass::setStaticVar(200);
    std::cout << "静态变量的值: " << MyClass::getStaticVar() << std::endl;  // 输出: 静态变量的值: 200

    // 非静态成员函数可以访问静态成员变量和调用静态成员函数
    obj1.printValues();  // 输出: 非静态变量的值: 30, 静态变量的值: 200, 通过静态成员函数获取的静态变量的值: 200

    // 在非静态成员函数中调用静态成员函数
    obj1.callStaticFunction();
    std::cout << "静态变量的值: " << MyClass::getStaticVar() << std::endl;  // 输出: 静态变量的值: 300

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

满天飞飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值