【rust】结构体

结构体

为什么会有多个 impl Engine?
  • 组织代码:把一部分方法放一个 impl,另一部分放另一个 impl,比如基础方法和扩展方法分开写。
  • 实现不同 trait:通常用 impl Engine 实现类型自身的方法,再用 impl Trait for Engine 实现某个 trait。
  • 分文件:如果用模块分文件,有时也会分开写 impl。

 

struct Engine {
    power: u32,
}

// 第一部分 impl,定义构造和基础方法
impl Engine {
    pub fn new(power: u32) -> Self {
        Self { power }
    }

    pub fn start(&self) {
        println!("Engine starting with power {}", self.power);
    }
}

// 第二部分 impl,实现更多功能
impl Engine {
    pub fn stop(&self) {
        println!("Engine stopped");
    }
}
 
struct Person {
    name: String,
    age: u32,
}

impl Person {
    // 构造方法,类似于 class 的构造函数
    fn new(name: &str, age: u32) -> Self {
        Self {
            name: name.to_string(),
            age,
        }
    }

    // 成员方法:需要 self 参数
    fn greet(&self) {
        println!("Hello, my name is {} and I'm {} years old.", self.name, self.age);
    }

    // 可变方法
    fn have_birthday(&mut self) {
        self.age += 1;
    }
}

fn main() {
    let mut p = Person::new("Alice", 30);
    p.greet();
    p.have_birthday();
    p.greet();
}

 

posted @ 2025-07-04 14:51  苏格拉底的落泪  阅读(7)  评论(0)    收藏  举报