Rust语言 学习16 面向对象编程特性
  dBFTbkVLMBge 2023年11月02日 27 0

一、面向对象语言特性

Rust语言 学习16  面向对象编程特性_面向对象

Rust语言 学习16  面向对象编程特性_语言特性_02

Rust语言 学习16  面向对象编程特性_面向对象_03

// 平均值
pub struct AveragedCollection {
    list: Vec<i32>, //私有字段
    average:f64     //私有字段
}

impl AveragedCollection {
    // add方法
    pub fn add(&mut self,value:i32) {
        self.list.push(value);
        self.update_average();
    }
    // remove方法
    pub fn remove(&mut self) -> Option<i32> {
        let result = self.list.pop();
        match result {
            Some(value) => {
                self.update_average();
                Some(value)
            },
            None => None,
        }
    }
    // average方法
    pub fn average(&self) -> f64 {
        self.average
    }
    // update
    fn update_average(&mut self) {
        let total :i32 = self.list.iter().sum();
        self.average = total as f64 / self.list.len() as f64;
    }

}

fn main() {

}

Rust语言 学习16  面向对象编程特性_面向对象_04

二、使用Trait对象存储不同类型的值

Rust语言 学习16  面向对象编程特性_语言特性_05

Rust语言 学习16  面向对象编程特性_面向对象_06

lib.rs定义

pub trait  Draw {
    fn draw(&self);
}

pub struct Screen {
    pub components:Vec<Box<dyn Draw>>,
}

impl Screen {
    pub fn run(&self) {
        for component in self.components.iter() {
            component.draw();
        }
    }
}

// 定义button结构体
pub struct Button {
    pub width:u32,
    pub height:u32,
    pub label:String,
}

// 为button实现draw这个trait
impl Draw for Button {
    fn draw(&self) {
        //绘制一个按钮
    }
}

main.rs定义

use concurrent::Draw;
use concurrent::{Button,Screen};

// 定义选择框
struct SelectBox {
    width:u32,
    height:u32,
    options:Vec<String>,
}

// 实现Draw trait
impl Draw for SelectBox {
    fn draw(&self) {
        // 绘制一个选择框
    }
}


fn main() {
    // 初始化screen
    let screen = Screen {
        components: vec![
            Box::new(SelectBox{
                width:75,
                height:10,
                options:vec![
                    String::from("Yes"),
                    String::from("Maybe"),
                    String::from("No"),
                ]
            }),
            Box::new(Button{
                width:50,
                height:10,
                label:String::from("OK"),
            }),
        ],
    };
    screen.run();

}

Rust语言 学习16  面向对象编程特性_语言特性_07

Rust语言 学习16  面向对象编程特性_语言特性_08

Rust语言 学习16  面向对象编程特性_语言特性_09

clone这个就是对象不安全例子




【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  xl8AfxMaa2OV   2023年11月02日   41   0   0 javaAPI面向对象
  X5zJxoD00Cah   2023年11月02日   51   0   0 面向对象
dBFTbkVLMBge