通过点运算符可逐层访问嵌套结构体成员,如person.address.street;初始化可用初始化列表或逐项赋值;常用于表示复杂对象如Car包含Engine和Wheel;结构体与类嵌套方式相同,区别仅在默认访问权限。

C++结构体嵌套结构体访问,简单来说就是一层一层地剥开“洋葱”,用点运算符
.
解决方案:
要访问嵌套结构体中的成员,你需要使用点运算符
.
#include <iostream>
struct Address {
std::string street;
std::string city;
std::string state;
};
struct Person {
std::string name;
int age;
Address address; // 嵌套的结构体
};
int main() {
Person person;
person.name = "Alice";
person.age = 30;
person.address.street = "123 Main St";
person.address.city = "Anytown";
person.address.state = "CA";
std::cout << "Name: " << person.name << std::endl;
std::cout << "Age: " << person.age << std::endl;
std::cout << "Street: " << person.address.street << std::endl;
std::cout << "City: " << person.address.city << std::endl;
std::cout << "State: " << person.address.state << std::endl;
return 0;
}这段代码展示了如何定义包含
Address
Person
person.address.street
street
立即学习“C++免费学习笔记(深入)”;
如何初始化嵌套结构体?
初始化嵌套结构体,你可以使用初始化列表,这是一种简洁且高效的方式。
#include <iostream>
#include <string>
struct Inner {
int x;
double y;
};
struct Outer {
std::string name;
Inner inner;
};
int main() {
// 使用初始化列表初始化
Outer outer = {"MyOuter", {10, 3.14}};
std::cout << "Name: " << outer.name << std::endl;
std::cout << "Inner.x: " << outer.inner.x << std::endl;
std::cout << "Inner.y: " << outer.inner.y << std::endl;
// 也可以分开初始化
Outer anotherOuter;
anotherOuter.name = "AnotherOuter";
anotherOuter.inner.x = 20;
anotherOuter.inner.y = 2.71;
std::cout << "Name: " << anotherOuter.name << std::endl;
std::cout << "Inner.x: " << anotherOuter.inner.x << std::endl;
std::cout << "Inner.y: " << anotherOuter.inner.y << std::endl;
return 0;
}这里,
Outer outer = {"MyOuter", {10, 3.14}};Inner
anotherOuter
结构体嵌套结构体在实际开发中的应用场景有哪些?
结构体嵌套在实际开发中用途广泛。 比如,表示一个复杂的对象,例如一个
Car
Engine
Wheel
#include <iostream>
#include <string>
#include <vector>
struct Engine {
std::string model;
int horsepower;
};
struct Wheel {
int size; // 英寸
std::string type; // 例如 "合金轮毂"
};
struct Car {
std::string brand;
std::string model;
Engine engine;
std::vector<Wheel> wheels; // 使用 vector 存储多个 Wheel
};
int main() {
// 创建一个 Car 对象
Car myCar;
myCar.brand = "Toyota";
myCar.model = "Camry";
// 初始化 Engine
myCar.engine.model = "2AR-FE";
myCar.engine.horsepower = 178;
// 初始化 Wheels
myCar.wheels.resize(4); // 4个轮子
for (int i = 0; i < 4; ++i) {
myCar.wheels[i].size = 17;
myCar.wheels[i].type = "铝合金";
}
// 打印 Car 的信息
std::cout << "汽车品牌: " << myCar.brand << std::endl;
std::cout << "汽车型号: " << myCar.model << std::endl;
std::cout << "发动机型号: " << myCar.engine.model << std::endl;
std::cout << "马力: " << myCar.engine.horsepower << std::endl;
std::cout << "轮子尺寸: " << myCar.wheels[0].size << " 英寸" << std::endl;
std::cout << "轮子类型: " << myCar.wheels[0].type << std::endl;
return 0;
}这个例子展示了如何使用嵌套结构体和
std::vector
结构体嵌套与类嵌套有什么区别?
结构体和类在C++中非常相似,主要区别在于默认访问权限:结构体默认是
public
private
在嵌套方面,结构体和类的嵌套方式没有区别。 你可以在结构体中嵌套类,也可以在类中嵌套结构体,访问方式都是一样的,通过点运算符
.
#include <iostream>
struct A {
int x;
};
class B {
public:
int y;
};
struct C {
A a;
B b;
};
class D {
public:
struct E {
int z;
};
E e;
};
int main() {
C c;
c.a.x = 10;
c.b.y = 20;
D d;
d.e.z = 30;
std::cout << "c.a.x: " << c.a.x << std::endl;
std::cout << "c.b.y: " << c.b.y << std::endl;
std::cout << "d.e.z: " << d.e.z << std::endl;
return 0;
}这段代码展示了如何在结构体中嵌套类,以及如何在类中嵌套结构体。 访问方式都是通过点运算符
.
以上就是C++结构体嵌套结构体访问方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号