假设我存储了一个人的数据。并且取决于它是男性还是女性的性别特定数据也将被存储。现在我应该使用Union存储性别特定的部分吗?这是一个好习惯还是有更好的方法,特别是使用C ++ 14?
答案 0 :(得分:3)
Union仅适用于不使用类的基本类型。您的工会中没有std::string
。因此,在C ++中很少使用union,但更常用于C。
在你的情况下,我会保持简单。最简单的方法是将所有数据成员放在同一个类中,而不管性别如何,只使用正确的数据。
class Person
{
// common stuff
int age;
int height;
// female specific stuff
// ???
// male specific stuff
// ???
};
或者你可以像这样使用继承:
class Person {};
class FemalePerson : public Person {};
class MalePerson : public Person {};
并且仅在相应的派生类中具有性别特定部分。
答案 1 :(得分:1)
您可以在类
中声明一个未命名的联合class Person
{
int gender;
// common stuff, which is empty in your case
int age;
int height;
union {
struct {
// female specific stuff
// ???
} female;
struct {
// male specific stuff
// ???
} male;
}
};
然后使用
之类的东西Person p;
switch (p.gender)
{
case MALE:
p.male.some_attribute = somevalue;
break;
case FEMALE:
p.female.some_attribute = somevalue;
break;
}
如果男性和女性之间没有共同的属性名称,您甚至可以删除结构名称,因此您只需要直接使用p.some_male_attribute
或p.some_female_attribute
而无需其他点。