legongju.com
我们一直在努力
2025-01-10 05:10 | 星期五

c++ operator[] 如何重载

在 C++ 中,可以通过重载 operator[] 来实现数组或容器的访问操作符。以下是一个示例,演示了如何重载 operator[] 以实现一个简单的类 MyArray 的访问操作符:

#include 

class MyArray {
public:
    // 构造函数
    MyArray(int size) : size_(size), data_(new int[size]) {}

    // 析构函数
    ~MyArray() { delete[] data_; }

    // 重载 operator[] 以实现访问操作符
    int& operator[](int index) {
        if (index < 0 || index >= size_) {
            throw std::out_of_range("Index out of range");
        }
        return data_[index];
    }

    // 重载 operator[] 以实现常量访问操作符
    const int& operator[](int index) const {
        if (index < 0 || index >= size_) {
            throw std::out_of_range("Index out of range");
        }
        return data_[index];
    }

private:
    int size_;
    int* data_;
};

int main() {
    MyArray arr(5);

    // 使用重载的 operator[] 设置和获取元素值
    arr[0] = 10;
    arr[1] = 20;
    arr[2] = 30;
    arr[3] = 40;
    arr[4] = 50;

    // 输出元素值
    std::cout << "arr[0] = " << arr[0] << std::endl;
    std::cout << "arr[1] = " << arr[1] << std::endl;
    std::cout << "arr[2] = " << arr[2] << std::endl;
    std::cout << "arr[3] = " << arr[3] << std::endl;
    std::cout << "arr[4] = " << arr[4] << std::endl;

    return 0;
}

在这个示例中,我们定义了一个名为 MyArray 的类,它包含一个整数数组 data_ 和一个表示数组大小的整数 size_。我们重载了 operator[] 以实现访问操作符,使得可以通过 arr[index] 语法来访问数组元素。同时,我们还重载了常量版本的 operator[],以便在常量对象上使用。

注意,为了确保数组访问的安全性,我们在重载的 operator[] 中添加了边界检查,并在索引超出范围时抛出 std::out_of_range 异常。

未经允许不得转载 » 本文链接:https://www.legongju.com/article/48984.html

相关推荐

  • table在C++多线程环境下的使用注意事项

    table在C++多线程环境下的使用注意事项

    在C++多线程环境下使用std::table时,需要注意以下几点: 线程安全:std::table本身并不是线程安全的。如果多个线程同时访问和修改std::table,可能会导致数据不...

  • C++ table的性能优化策略有哪些

    C++ table的性能优化策略有哪些

    在C++中,表(通常是指数组或向量)的性能优化可以从多个方面进行。以下是一些建议: 预先分配内存:当你知道表的大小时,预先分配足够的内存空间,以避免在运行...

  • 如何自定义C++的table类

    如何自定义C++的table类

    要自定义一个C++的表格(table)类,你需要先确定你的表格类需要哪些功能。例如,你可能需要添加、删除和修改行和列,以及获取和设置单元格的值。下面是一个简单...

  • C++标准库中有无现成的table实现

    C++标准库中有无现成的table实现

    C++ 标准库没有直接提供一个名为 “table” 的容器类 std::vector:这是一个二维向量,可以用来表示一个动态大小的表格。你可以通过调整外部向量的大小来改变表格...

  • c++ operator[] 怎么用

    c++ operator[] 怎么用

    在 C++ 中,operator[] 是一个重载的下标运算符,用于访问容器(如数组、向量、列表等)中的元素。它接受一个下标(索引)作为参数,并返回容器中该下标对应的元...

  • java的set集合 怎么确保唯一性

    java的set集合 怎么确保唯一性

    在Java中,Set集合是一个不允许重复元素的集合。当你向Set中添加元素时,它会自动确保元素的唯一性。以下是一些常用的Set实现类: HashSet:基于哈希表的实现,它...

  • java的set集合 如何排序

    java的set集合 如何排序

    在Java中,Set集合是一个无序的集合,这意味着它不会对其元素进行排序。但是,如果你想要对Set集合中的元素进行排序,你可以将Set转换为一个List,然后使用Colle...

  • python命令行传参怎样更高效

    python命令行传参怎样更高效

    在Python中,可以通过以下几种方式高效地传递命令行参数: 使用sys.argv模块:
    sys.argv是一个包含命令行参数的字符串列表。sys.argv[0]是脚本名称,sys.ar...