C++整理11_成员

hwaityd / 2024-10-29 / 原文

类::成员

1. 静态(static)成员

  • 概念:静态成员是属于类的,而不是属于类的某个特定对象的。所有对象共享同一个静态成员。
  • 语法
    class MyClass {
    public:
        static int staticVar;
    };
    
  • 特点:静态成员变量在整个程序范围内只有一个实例,所有对象对它的修改都会影响到其他对象。

示例代码

#include <iostream>

class MyClass {
public:
    static int staticVar;

    void staticFunction() {
        std::cout << "Static function" << std::endl;
    }
};

int MyClass::staticVar = 10;

void function() {
    MyClass::staticFunction(); // 调用静态成员函数
    std::cout << MyClass::staticVar << std::endl; // 访问静态成员变量
}

int main() {
    function(); // 静态成员函数可以在没有对象的情况下调用
    return 0;
}

2. 静态成员的生命周期

  • 概念:静态成员的生命周期从程序开始运行时开始,直到程序结束时结束。
  • 特点:静态成员的初始化在main函数执行之前完成,且只初始化一次。

3. 静态成员的调用规则

  • 概念:静态成员可以通过类名直接访问,也可以通过对象访问。
  • 特点:即使在没有创建类的对象的情况下,也可以访问静态成员。

4. 常成员

  • 概念:常成员函数保证不会修改对象的状态。
  • 语法
    class MyClass {
    public:
        void function() const {
            // 只读操作
        }
    };
    
  • 特点:常成员函数可以在常对象上调用,也可以在非常对象上调用。

5. 常数据成员

  • 概念:常数据成员的值一旦初始化后不能被修改。
  • 语法
    class MyClass {
    public:
        MyClass(int val) : constDataMember(val) {}
        const int constDataMember;
    };
    
  • 特点:常数据成员必须在构造函数的初始化列表中初始化。

6. 初始化参数列表

  • 概念:初始化参数列表用于初始化非静态成员变量。
  • 语法
    class MyClass {
    public:
        MyClass(int val) : memberVar(val) {}
    private:
        int memberVar;
    };
    
  • 特点:使用初始化参数列表可以提高效率,特别是对于非POD类型的成员变量。

7. 常函数成员

  • 概念:常函数成员用const关键字修饰,表示该函数不会修改对象的状态。
  • 语法
    class MyClass {
    public:
        void function() const {
            // 只读操作
        }
    };
    
  • 特点:常函数成员可以在常对象上调用。

8. this指针

  • 概念this指针是一个指向当前对象的指针,用于区分成员函数中的局部变量和类的成员变量。
  • 语法
    class MyClass {
    public:
        void function(int val) {
            this->memberVar = val; // 使用this指针区分
        }
    private:
        int memberVar;
    };
    
  • 特点:在静态成员函数中,this指针是不允许使用的,因为静态成员函数不依赖于具体的对象。

以上是类成员的一些基本概念和用法,包括静态成员、常成员、初始化列表和this指针的使用。这些特性使得C++类更加灵活和强大。