MST

星途 面试题库

面试题:Rust自定义类型的运算符重载

假设你有一个自定义的Rust结构体 `Point`,包含 `x` 和 `y` 两个 `i32` 类型的字段。请实现 `+` 运算符的重载,使得两个 `Point` 结构体实例相加时,返回一个新的 `Point` 实例,其 `x` 和 `y` 字段分别是两个操作数对应字段之和。同时,解释 `impl` 块、`std::ops::Add` 特征在这个过程中的作用。
41.5万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
struct Point {
    x: i32,
    y: i32,
}

impl std::ops::Add for Point {
    type Output = Point;

    fn add(self, other: Point) -> Point {
        Point {
            x: self.x + other.x,
            y: self.y + other.y,
        }
    }
}

impl 块的作用

  • impl 块用于为结构体、枚举或 trait 提供具体的实现。在上述代码中,impl std::ops::Add for Point 表示为 Point 结构体实现 std::ops::Add 这个 trait。通过 impl 块,我们可以在 Point 结构体上定义与 Add trait 相关的方法,这里就是定义了 add 方法,使得 Point 结构体能够使用 + 运算符。

std::ops::Add 特征的作用

  • std::ops::Add 是 Rust 标准库中定义的一个 trait,用于重载 + 运算符。当我们为 Point 结构体实现 Add trait 时,实际上是告诉 Rust 编译器如何对 Point 结构体的实例进行加法操作。在实现 Add trait 时,必须指定 Output 关联类型,这里表示 + 运算的结果类型,同时要实现 add 方法,定义具体的加法逻辑。这样,在代码中就可以像对基本类型一样对 Point 结构体实例使用 + 运算符。