C++之结构体的另类用法

在此之前我一直很少使用struct结构体,之前也有在书本上看到过关于struct与class之间有对比,也只是留下个大致印象,貌似是说主要区别就在于类默认成员访问权限为私有,而struct则是默认公有的;

没错,结构体的功能十分的强大,它完全可以拿过来当做一个类来用,你可以在里面像定义类一样定义一个结构体,而在使用的时候也遵循相似的规则;

请看以下代码:

struct my_struct
{
	char* publicInfo;
	my_struct(char* _publicInfo, char* _privateInfor) : publicInfo(_publicInfo), privateInfor(_privateInfor)
	{
		cout << privateInfor << endl;
	}
private:
	char* privateInfor;
};

运行代码:

char* iprivateInfo = "This is private information!";
char* ipublicInfo  = "This is public information!";
my_struct test_struct(ipublicInfo, iprivateInfo);
cout << test_struct.publicInfo << endl;

运行结果:


<think>嗯,用户想了解C++结构体用法和示例。首先我需要回顾一下结构体的基本概念,确保自己理解正确。结构体C++中是用来将不同数据类型组合在一起的复合数据类型,对吧?用户提供的引用里有很多例子,比如定义结构体、初始化、赋值方法,还有模板结构体的使用。用户之前的问题是关于UG二次开发中创建刀柄的,可能现在转向C++的基础知识,所以需要确保回答的结构体内容清晰,适合不同层次的学习者。可能需要从定义开始,逐步讲解如何声明、初始化、访问成员,再结合示例代码。要注意引用中的内容,比如引用1详细介绍了结构体的定义和初始化,引用2讨论了赋值方法,引用3和5提供了示例代码,引用4提到了结构体模板。需要整合这些信息,但不要直接复制,而是用自己的话解释,并正确标注引用。用户可能对结构体的实际应用感兴趣,比如在UG开发中如何使用结构体来管理刀具参数。不过当前问题更基础,所以应该集中在语法和使用方法上。需要检查示例代码的正确性,确保没有语法错误,比如结构体定义后的分号,访问成员的方式是否正确。另外,用户提到系统级指令,要求数学表达式用$...$,独立公式用$$...$$,并且正确使用LaTeX。在结构体的例子中可能涉及不多,但如果有公式,比如计算复数绝对值,需要正确应用格式。例如,引用5中的abscomplex函数用到了平方根,可以表示为$\sqrt{x^2+ y^2}$。还要生成相关问题,考虑用户可能想深入结构体的高级用法,比如嵌套结构体、与类的区别、内存对齐等。需要确保问题相关且有引导性,帮助用户进一步学习。最后,检查回答是否符合中文要求,引用标注是否自然,代码示例是否正确,并避免使用Markdown格式。确保回答结构清晰,分步骤讲解,让用户容易理解。</think>### C++ 结构体使用方法详解与示例 #### 一、结构体定义 结构体通过`struct`关键字定义,允许组合不同数据类型。语法格式: ```cpp struct 结构体名 { 数据类型 成员1; 数据类型 成员2; // ... }; ``` 示例定义: ```cpp struct Book { string title; double price; int pages; }; // 分号不可省略[^1] ``` #### 二、结构体初始化 1. **成员逐个赋值**: ```cpp Book math; math.title = "Linear Algebra"; math.price = 89.5; math.pages = 300; // 引用[3]的初始化方式 ``` 2. **初始化列表**: ```cpp Book physics = {"Quantum Mechanics", 120.0, 450}; // 引用[2]的批量赋值方法 ``` 3. **构造函数初始化**(C++11+): ```cpp struct Student { string name; int age; Student(string n, int a) : name(n), age(a) {} }; Student s("Alice", 20); // 直接构造 ``` #### 三、结构体访问 使用`.`操作符访问成员: ```cpp cout << physics.title << "售价:" << physics.price << endl; // 输出成员值[^3] ``` #### 四、结构体赋值 1. **直接赋值**(浅拷贝): ```cpp Book book1 = physics; // 引用[2]的结构体整体赋值 ``` 2. **动态赋值**: ```cpp void updatePrice(Book &b, double new_price) { b.price = new_price; // 通过引用修改成员[^5] } ``` #### 五、高级应用 1. **结构体模板**(C++11+): ```cpp template<typename T1, typename T2> struct Pair { T1 first; T2 second; }; Pair<int, double> data = {5, 3.14}; // 引用[4]的模板结构体 ``` 2. **嵌套结构体**: ```cpp struct Date { int year, month, day; }; struct Employee { string name; Date birthday; // 嵌套结构体成员 }; ``` #### 六、综合示例 ```cpp #include <iostream> using namespace std; struct Point { double x; double y; double distanceToOrigin() { return sqrt(x*x + y*y); // $$d = \sqrt{x^2 + y^2}$$[^5] } }; int main() { Point p1 = {3.0, 4.0}; // 初始化列表赋值 cout << "到原点的距离:" << p1.distanceToOrigin() << endl; // 输出5.0 return 0; } ``` ### 关键特性对比 | 特性 | 结构体(struct) | 类(class) | |------------|---------------------|-------------------| | 默认访问权限 | public | private | | 继承默认性 | public继承 | private继承 | | 适用场景 | 数据聚合 | 数据封装与行为抽象 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值