c++——静态成员变量、静态成员函数和const修饰的静态成员变量

一、c++静态成员变量

在C++中,静态成员变量(Static Member Variable)是类的一种特殊类型的成员变量,它被类的所有实例共享,而不是每个实例都有自己的副本。静态成员变量在类的所有对象之间保持唯一的状态,具有一些特殊的用途和语法。

1、概念:

静态成员变量是类的成员变量,但不是依赖于类的实例而存在的。它在类的所有实例之间共享相同的内存位置,因此在类的所有对象之间保持唯一的状态。
静态成员变量在类的声明中使用static关键字来定义,并在类的实现文件中进行初始化换句话说就是不能在类中进行初始化)。

2、使用方法:

①、声明静态成员变量:
在类的声明中,使用static关键字声明静态成员变量。声明通常在类的public、private或protected部分。

②、初始化静态成员变量:(不能在类里面进行初始化)
静态成员变量需要在类的实现文件中进行初始化。在类外部,使用类名和作用域解析操作符::来初始化静态成员变量。

③、访问静态成员变量:
静态成员变量不属于类的实例,因此可以使用类名和作用域解析操作符来访问,也可以在类的成员函数中通过this指针访问。

案例:

#include <iostream>
using namespace std;
class MyClass {
   public:
    /*
     *声明静态成员变量
     *静态成员变量在编译阶段就已经分配了内存,存在全局静态区
     */
    static int staticVar;

    MyClass() {
        // 在构造函数中修改静态成员变量
        staticVar++;
    }

    // 静态成员函数,用于访问静态成员变量
    static void printStaticVar() {
        cout << "Static variable value: " << staticVar << endl;
    }
};

// 初始化静态成员变量
int MyClass::staticVar = 0;//在类外初始化

int main() {
    MyClass obj1;
    MyClass::printStaticVar();  // 访问静态成员变量

    MyClass obj2;
    MyClass::printStaticVar();  // 访问静态成员变量

    return 0;
}

3、总结

在这里插入图片描述
①静态成员变量在内存中只有一份,多个对象共享一个静态变量
②静态成员变量,必须类内声明,类外定义
③静态成员变量可以通过类的作用域访问
④静态成员变量可以通过类的对象访问

二、静态成员函数

1、概念:

静态成员函数(Static Member Function):
静态成员函数是不依赖于类的实例的成员函数。它们可以通过类名和作用域解析操作符::直接访问。静态成员函数不能访问非静态成员变量,也不能使用this指针。

2、特点:

①静态成员函数能访问静态成员变量不能访问普通的成员变量
②可以通过类的作用域访问静态成员函数
③可以通过对象访问静态成员函数

案例代码

#include <iostream>
using namespace std;
class MyClass {
   private:
    int regularVar;        // 普通成员变量
    static int staticVar;  // 静态成员变量

   public:
    MyClass(int regValue, int statValue) : regularVar(regValue) {
        staticVar = statValue;
    }

    static void staticFunction() {
        // 静态成员函数可以访问静态成员变量,但不能访问普通成员变量
        cout << "Static member function accessing staticVar: " << staticVar
             << endl;
        // 下面一行会引发编译错误,因为静态函数不能访问普通成员变量
        // cout << "Static member function accessing regularVar: " <<
        // regularVar << endl;
    }

    void regularFunction() {
        cout << "Regular member function accessing regularVar: " << regularVar
             << endl;
    }
};

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

int main() {
    // 使用类的作用域访问静态成员函数
    MyClass::staticFunction();

    MyClass obj(42, 100);
    obj.regularFunction();

    // 通过对象访问静态成员函数
    obj.staticFunction();  // 也可以通过对象访问,但是不推荐,最好使用类名访问

    return 0;
}

三、const修饰的静态成员变量

①const修饰的静态成员变量保存在常量区,只读的,在内存中只有一份
②const修饰的静态成员变量可以在类内定义且初始化
③const修饰的静态成员变量可以通过类的作用域访问
④const修饰的静态成员变量可以通过对象访问
⑤静态成员函数可以访问const修饰的静态成员变量

代码案例:

#include <iostream>
using namespace std;

class MyClass {
   public:
    // 在类内部定义且初始化带有const修饰的静态成员变量
    static const int staticConstVar = 42;

    static void printStaticConstVar() {
        // 静态成员函数可以访问const修饰的静态成员变量
        cout << "Static const variable value: " << staticConstVar << endl;
    }
};

int main() {
    // 通过类的作用域访问const修饰的静态成员变量
    cout << "Accessing via class scope: " << MyClass::staticConstVar << endl;

    // 通过对象访问const修饰的静态成员变量
    MyClass obj;
    cout << "Accessing via object: " << obj.staticConstVar << endl;

    // 调用静态成员函数,访问const修饰的静态成员变量
    MyClass::printStaticConstVar();

    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
回答: 在C++中,可以通过在静态成员变量前加上关键字const修饰静态成员变量。这样的静态成员变量属于整个类所有,其生命周期不依赖于任何对象。可以通过类名直接访问公有静态成员变量,也可以通过对象名访问公有静态成员变量静态成员变量是所有对象共享的。在一个类中,静态成员变量的定义通常在类的定义外进行,并且需要在定义时初始化。一旦被定义和初始化,静态成员变量的值将被所有对象共享,并且不能在对象中进行修改,因为静态成员变量const修饰。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [C++静态成员变量](https://blog.csdn.net/z1zyy/article/details/128038036)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [C++中的静态成员变量](https://blog.csdn.net/SlowIsFastLemon/article/details/103643796)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小羊客栈

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

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

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

打赏作者

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

抵扣说明:

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

余额充值