gpt4 book ai didi

c++ - 字符串、 union 和指针

转载 作者:太空狗 更新时间:2023-10-29 21:22:54 25 4
gpt4 key购买 nike

注意:这是一项作业。我正在寻找使用 union 的解决方案,因为它是作业的一部分。我提供了我想要使用的解决方案,但我需要帮助来正确看待这个概念和方法。 ---

我知道字符串如何在 union 中不起作用,并且之前已经问过这个问题 - 但他们似乎都建议使用 Boost。然而,我看到有人提出了建议,但它似乎被忽视了,我想对此进行更多澄清。下面我有两个结构,一个包含指向两个结构的指针的 union 作为解决方法:

struct HourlyInfo {
string firstName;
string lastName;
string title;
int hoursWorked;
double hourlyRate;
};

struct SalaryInfo {
string firstName;
string lastName;
string title;
double salary;
double bonus;
};

union Employee {
HourlyInfo *hourlyEmployee;
SalaryInfo *salaryEmployee;
};

这种方法有什么问题吗?在我看来,这似乎违背了 union 的目的。

编辑:这是一项作业,但它非常开放。我不是在寻找答案,只是在寻找为什么可以或应该避免某种方法的解释和输入。我的替代方案是使用 cstring,但我试图权衡指针方法(为了方便 string)与仅使用 cstring

编辑 #2:我知道一旦另一个结构被定义, union 将使一个结构无效。我将创建这些 union 的数组,并且在这种情况下使用 union 是有保证的,因为任何员工都是小时工或薪水。我担心的是使用字符串和指针作为解决方法。

最佳答案

C++ 的实现方式是继承。

struct EmployeeInfo {
string firstName;
string lastName;
string title;
};

struct HourlyInfo : public EmployeeInfo {
int hoursWorked;
double hourlyRate;
};

struct SalaryInfo : public EmployeeInfo {
double salary;
double bonus;
};

给它一个虚拟析构函数,这样你就可以通过基类指针删除。并存储指向 EmployeeInfo 的指针而不是 union 。必要时向上转换。并通过虚函数或某处的“员工类型”变量来解释差异。在 union 场景中,无论如何您都需要它,因为 union 本身不会告诉您其中的哪个数据项是相关的。

是的,您可以派生struct。您也可以在其中包含成员函数。

关于c++ - 字符串、 union 和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19609617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com