MST

星途 面试题库

面试题:Rust二元运算符重载中的类型转换与特性关联

定义两个结构体 `Meters` 和 `Centimeters`,分别表示米和厘米。`Meters` 包含一个 `f64` 类型的 `value` 成员变量,`Centimeters` 同理。实现 `+` 运算符重载,使得 `Meters` 与 `Centimeters` 能相加,返回一个 `Centimeters` 实例。要求在实现过程中合理处理米和厘米之间的单位转换,并且要通过合适的Rust特性(trait)来确保类型安全。
28.7万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 定义Meters结构体
struct Meters {
    value: f64,
}

// 定义Centimeters结构体
struct Centimeters {
    value: f64,
}

// 定义Add trait,用于实现加法操作
use std::ops::Add;

impl Add for Meters {
    type Output = Centimeters;

    fn add(self, other: Centimeters) -> Centimeters {
        let total_cm = self.value * 100.0 + other.value;
        Centimeters { value: total_cm }
    }
}

impl Add for Centimeters {
    type Output = Centimeters;

    fn add(self, other: Meters) -> Centimeters {
        let total_cm = self.value + other.value * 100.0;
        Centimeters { value: total_cm }
    }
}

你可以使用以下方式测试这个代码:

fn main() {
    let meters = Meters { value: 2.0 };
    let centimeters = Centimeters { value: 50.0 };
    let result = meters + centimeters;
    println!("The result is: {} cm", result.value);

    let result2 = centimeters + meters;
    println!("The result2 is: {} cm", result2.value);
}