静态成员的使用,不理解

静态成员的使用,不理解,
使用方法不太能够,
就是不知道啥时候用

img


class Cat
{
public:
    explicit Cat()
    {
        m_iNum++;
    }

    static int GetNum() { return m_iNum; }
private:
    static int m_iNum;
};

//静态变量,类外初始化
int Cat::m_iNum = 0;
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7805230
  • 这篇博客你也可以参考下:有一篇文章,共有三行文字,每行有80个字符。要求分别统计出其中英文大写字母,小写字母,数字,空格以及其他字符的个数
  • 除此之外, 这篇博客: 为什么operator<<左移运算符不能重载成员函数,而只能重载为友元函数?中的 1.左移运算符成员函数达不到我们的效果 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 首先我们想要的效果是:
    cout<<Student<<endl;因为原来的左移运算符是不能用来输出结构体Student的,所以我们需要重载来达到我们输出结构体的目的。

    整体代码如下:

    #include <bits/stdc++.h>
    using namespace std;
    struct Student{
        string name;
        int score;
        void operator<<(const Student &student){
    
        }
    };
    
    int main(){
        Student a={"D",90};
        Student b={"A",100};
        a.operator<<(b);
        return 0;
    }
    

    成员函数:

    void operator<<(const Student &student){
    }
    

    如果我们调用这个方法的话,如下所示:

    Student a={"D",90};
    Student b={"A",100};
    a.operator<<(b);
    

    这样达不到我们想要的cout<<student<<endl的效果。因为他的左移运算符前不是我们需要的cout(因为cout是ostream类型)而且我们现在是a.opeartor是Student类型,所以达不到我们需要的效果。

  • 您还可以看一下 张旭老师的【拯救者 】数据库系统概论速成课程中的 01·文档下载小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    静态成员是指在类的定义中使用static关键字定义的变量或方法。静态成员的作用在于可以被该类的所有实例所共享,可以实现一些与对象无关的操作。常见的使用场景包括:计数器、单例模式、工具类等。

    静态变量的使用方法: 需要在类的定义中使用static关键字来声明静态变量,如下所示:

    class MyClass {
    private:
        static int count; // 静态变量
    public:
        MyClass() { count++; } // 在构造函数中对count进行操作
        static void printCount() { cout << "Count: " << count << endl; } // 静态方法,可以访问静态变量
    };
    int MyClass::count = 0; // 静态变量初始化,类外进行
    
    int main() {
        MyClass obj1;
        MyClass obj2;
        MyClass::printCount(); // 静态方法的调用,输出Count: 2
        return 0;
    }
    

    注意事项: 1. 静态成员变量必须在类外进行初始化。 2. 静态成员变量可以在公有、私有和保护区域中声明,但是常见做法是将它们放在私有部分,并提供公有的接口方法来访问它们。 3. 静态成员函数中不能使用this指针,因为静态成员是与类本身相关联,而不是与类的实例相关联的。 4. 静态成员变量和函数可以直接通过类名访问,不需要通过类的实例来访问。

    静态方法的使用方法: 需要在类的定义中使用static关键字来声明静态方法,如下所示:

    class MyClass {
    public:
        static int doubleValue(int num) { return num * 2; } // 静态方法
    };
    
    int main() {
        int result = MyClass::doubleValue(5); // 调用静态方法
        cout << result << endl; // 输出10
        return 0;
    }
    

    注意事项: 1. 静态成员方法不能访问非静态成员变量或方法,因为静态方法不属于某个具体的实例。 2. 静态成员方法只能访问静态成员变量或方法。