-
Couldn't load subscription status.
- Fork 0
Open
Description
Лабораторная работа №2 - Ссылки, Ownership. Impl. Traits. Generics
Тема: Ссылки, Ownership. Impl. Traits. Generics
Задача 1
Постановка задачи
Создайте структуру Pair, которая хранит два значения одного типа T. Реализуйте методы для получения и изменения значений пары. Убедитесь, что использование ссылок и копирование данных работает корректно.
Математическая модель
Не требуется.
Список идентификаторов
| Имя переменной | Тип данных | Описание |
|---|---|---|
| first | T | Первое значение пары |
| second | T | Второе значение пары |
Код программы
struct Pair<T> {
first: T,
second: T,
}
impl<T> Pair<T> {
fn new(first: T, second: T) -> Self {
Pair { first, second }
}
fn get_first(&self) -> &T {
&self.first
}
fn get_second(&self) -> &T {
&self.second
}
fn set_first(&mut self, value: T) {
self.first = value;
}
fn set_second(&mut self, value: T) {
self.second = value;
}
}
fn main() {
let mut pair = Pair::new(10, 20);
println!("Первое значение: {}", pair.get_first());
println!("Второе значение: {}", pair.get_second());
pair.set_first(30);
pair.set_second(40);
println!("Новые значения: {}, {}", pair.get_first(), pair.get_second());
}Результаты работы программы
Первое значение: 10
Второе значение: 20
Новые значения: 30, 40
Задача 2
Постановка задачи
Определите трейт PrintInfo, который содержит метод print_info(&self). Реализуйте этот трейт для структуры Person, чтобы можно было вызвать метод print_info на объекте Person.
Математическая модель
Не требуется.
Список идентификаторов
| Имя переменной | Тип данных | Описание |
|---|---|---|
| name | String | Имя человека |
| age | u32 | Возраст человека |
Код программы
trait PrintInfo {
fn print_info(&self);
}
struct Person {
name: String,
age: u32,
}
impl PrintInfo for Person {
fn print_info(&self) {
println!("Имя: {}, Возраст: {}", self.name, self.age);
}
}
fn main() {
let person = Person {
name: String::from("Анна"),
age: 25,
};
person.print_info();
}Результаты работы программы
Имя: Георгий, Возраст: 18
Информация о студенте
Киселев Георгий, 1 курс, группа ИВТ-1.1
Metadata
Metadata
Assignees
Labels
No labels