面试题答案
一键面试// 定义父结构体
struct Parent {
common_field: String,
}
// 父结构体的初始化函数
impl Parent {
fn new_common_field(common_field: &str) -> Self {
Parent {
common_field: common_field.to_string(),
}
}
}
// 定义第一个子结构体,模拟继承自父结构体
struct Child1 {
// 包含父结构体的实例,以模拟继承
parent: Parent,
child1_specific_field: i32,
}
// 子结构体Child1的初始化函数
impl Child1 {
fn new(child1_specific_field: i32, common_field: &str) -> Self {
Child1 {
parent: Parent::new_common_field(common_field),
child1_specific_field,
}
}
}
// 定义第二个子结构体,模拟继承自父结构体
struct Child2 {
// 包含父结构体的实例,以模拟继承
parent: Parent,
child2_specific_field: f64,
}
// 子结构体Child2的初始化函数
impl Child2 {
fn new(child2_specific_field: f64, common_field: &str) -> Self {
Child2 {
parent: Parent::new_common_field(common_field),
child2_specific_field,
}
}
}
可以这样使用这些结构体:
fn main() {
let child1 = Child1::new(42, "Hello from Child1");
let child2 = Child2::new(3.14, "Hello from Child2");
println!("Child1: common_field = {}, child1_specific_field = {}", child1.parent.common_field, child1.child1_specific_field);
println!("Child2: common_field = {}, child2_specific_field = {}", child2.parent.common_field, child2.child2_specific_field);
}
在上述代码中:
- 父结构体
Parent
:定义了一个公共字段common_field
,并提供了一个初始化函数new_common_field
来创建Parent
实例。 - 子结构体
Child1
和Child2
:通过在结构体中包含Parent
实例来模拟继承。每个子结构体都有自己特有的字段,并提供了初始化函数new
。在new
函数中,先调用父结构体的初始化函数来初始化parent
字段,再初始化自身特有的字段。 main
函数:展示了如何创建Child1
和Child2
的实例,并打印出它们的字段值。这种方式利用了Rust结构体的组合特性,以一种高效、安全且易于理解的方式实现了类似继承的结构体层次结构初始化。