rust学习_面向对象

封装

可以使用结构体struct来封装数据,使用关联函数和方法实现对数据的操作
  例如
      struct Rectangle {
          width: u32,
          height: u32,
      }

    impl Rectangle {
         fn new(width: u32, height: u32)-> Rectangle {
               Rectangle { width, heoght}
         }

      fn area(&self) -> u32 {
         self.width * self.height
      }

继承

1.rust不支持继承 但是可以通过其他方式实现继承
2.rust实现继承的方式
  1.使用组合实现继承
     1.比喻:一个学生有一个书包,则学生类可以继承书包类型的字段 
     2.代码示例
        //1.定义Book结构体
         struct Book {
            title: String,
            author: String,
         }

        //2.Book的方法
        impl Book {
           // Book自己的方法
           fn print_details(&self) {
              println!("Title: {}, Author: {}", self.title, self.author);
           }
         }

        //3.liabrary用book实例
        struct Labrary {
           book:Book
        }
       //4.实现library的构造函数
              impl Library {
                 fn new(book: Book) -> Library {
                     Library {book}
                 }
              }

      //5. main函数中使用library和book
     fn main() {
          // 创建一个Book实例
          let my_book = Book {
              title: String::from("Rust编程之道"),
              author: String::from("张三"),
          };

          // 使用Book实例来创建Library实例
          let my_library = Library::new(my_book);

          // 通过Library实例直接调用Book实例的print_details方法
          my_library.book.print_details();
}
 2.使用使用trait实现继承
  / / 定义一个 Trait,描述用户的基本行为
  trait UserBehavior {
     fn display_info(&self);
  }

  // 实现 UserBehavior Trait
  impl UserBehavior for User {
     fn display_info(&self) {
        println!("Username: {}, Email: {}", self.username, self.email);
     }
   }

  impl UserBehavior for Admin {
     fn display_info(&self) {
        println!("Username: {}, Email: {}, Admin Level: {}", self.user.username, self.user.email, self.admin_level);
     }
  }

  // 用户信息结构体
  struct User {
      username: String,
      email: String,
  }


 
  impl User {
     pub fn new(username: String, email: String) -> User {
        User { username, email }
     }
 }

// 管理员结构体,包含用户信息
struct Admin {
    user: User,
    admin_level: u8,
}

impl Admin {
    pub fn new(username: String, email: String, admin_level: u8) -> Admin {
        let user = User::new(username, email);
        Admin { user, admin_level }
    }

    pub fn manage_users(&self) {
        println!("Managing users...");
    }
}
// 泛型函数,接受实现了 UserBehavior Trait 的引用
fn display_info_for_anyone<T: UserBehavior>(person: &T) {
    person.display_info();
}

fn main() {
    let user = User::new(String::from("user"), String::from("user@example.com"));
    let admin = Admin::new(String::from("admin"), String::from("admin@example.com"), 5);

    display_info_for_anyone(&user);
    display_info_for_anyone(&admin);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

simper_zxb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值