MST

星途 面试题库

面试题:Rust中如何在结构体上重载加法运算符

请你用Rust实现一个结构体,并为其重载加法运算符,使得两个该结构体实例相加能够得到有意义的结果,例如两个包含数值的结构体实例相加,结果为对应数值相加后的新结构体实例。给出完整代码,并解释实现过程。
40.1万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 定义一个结构体
struct Point {
    x: i32,
    y: i32,
}

// 为Point结构体实现Add trait,重载加法运算符
use std::ops::Add;

impl Add for Point {
    type Output = Point;

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

fn main() {
    let p1 = Point { x: 1, y: 2 };
    let p2 = Point { x: 3, y: 4 };
    let result = p1 + p2;
    println!("结果: x = {}, y = {}", result.x, result.y);
}

实现过程解释

  1. 定义结构体
    • struct Point { x: i32, y: i32; } 定义了一个名为 Point 的结构体,它有两个 i32 类型的字段 xy,可以理解为二维平面上的一个点的坐标。
  2. 重载加法运算符
    • use std::ops::Add; 引入 Add trait,这个trait定义了加法操作的行为。
    • impl Add for PointPoint 结构体实现 Add trait。
    • type Output = Point; 定义加法操作返回的类型也是 Point 结构体。
    • fn add(self, other: Point) -> Point 实现 add 方法,该方法接收两个 Point 实例(selfother),返回一个新的 Point 实例,新实例的 x 字段是两个操作数 x 字段之和,y 字段是两个操作数 y 字段之和。
  3. 测试代码
    • main 函数中,创建两个 Point 实例 p1p2,然后使用重载的加法运算符 + 将它们相加,将结果打印出来。