字符串、联合和指针
Strings, Unions, and Pointers
注意:这是一个作业。我正在寻找使用工会的解决方案,因为这是任务的一部分。我提供了我想要使用的解决方案,但我需要帮助来正确看待这个概念和方法。---
我知道字符串在工会中不起作用,这个问题之前已经问过 - 但它们似乎都以 Boost 结束。然而,我看到有人建议指针,但它似乎被忽视了,我想对此进行更多澄清。下面我有两个结构,一个联合包含指向两个结构的指针作为解决方法:
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;
};
这种方法有什么问题吗?对我来说,这似乎违背了工会的目的。
编辑:这是一项作业,但它非常开放。我不是在寻找答案,只是解释和输入为什么某种方法可能或应该避免。我的替代方案是使用 cstring
,但我正在尝试权衡指针方法(为了方便string
)与仅使用 cstring
.
编辑#2:我知道一旦定义了一个结构,工会就会使另一个结构无效。我将创建一系列这些工会,在这种情况下使用工会是有道理的,因为任何员工都是小时工或薪水。我担心的是使用字符串和指针作为解决方法。
执行此操作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
而不是联合的指针。必要时上映。并通过虚函数或某处的"员工类型"变量来解释差异。在联合方案中,无论如何都需要它,因为联合本身不会告诉您其中的哪个数据项是相关的。
是的,你可以推导出struct
的。您也可以在其中使用成员函数。
您也可以使用匿名联合和结构:
struct Employee {
string firstName;
string lastName;
string title;
bool isHourly;
union {
struct {
double hourlyRate;
int hoursWorked;
} hourly;
struct {
double salary;
double bonus;
} salaried;
};
};
然后通过Employee emp; emp.hourly.hourlyRate = 100;
访问它们您甚至可以删除结构名称 - 然后您将能够emp.salary
访问它们的字段。你的方法仍然很好 - 假设你有存储信息的地方来检查工人是有薪还是按小时。另一个指针不会为 null,它将是指向相同数据的同一指针 - 但被视为另一种类型,因此可能会导致未定义的行为。
不过,我自己仍然更喜欢策略模式之类的东西。
抱歉没有看到它们是指针,是的,这完全没有意义。此外,在分配每小时信息和访问薪水信息::奖金会员时,您会遇到崩溃。由于一个结构(可能)比另一个结构大。(如果 int = 32 位,双精度 = 64 位)
我在这里没有看到任何问题。
请注意:
- 您将无法同时使用这两个指针来存储不同的值。
- 通过将两个(结构)指针封装在一个联合中,您不会节省太多。
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- 使用指针初始化 char 数组或字符串 C++
- 指针保留字符串
- Visual c ++,使用字符串引用/指针调用 dll 函数
- strcpy 在类中无法使用字符串指针
- C++为 void 指针分配一个字符串
- OpenGL 统一名称指针作为字符串
- 如何将字符串指针数组转换为字符串类型的智能指针向量?
- 转换指针引用的字符串
- 未分配释放C++(C 字符串)指针
- 为什么 C 样式字符串的工作空指针检查不?
- 为什么多维数组中的空字符串文本衰减为空指针?
- 使用终止程序的指针在数组中输入字符串
- 将指针作为缓冲区传递到第一个字符串元素
- 指针 - 字符串C
- C++:更改指针字符串的值
- 使用带字符指针字符串的基于范围的For循环
- 转换/解析指针字符串和双精度
- 有问题分配字符串指针字符串值