Alo*_*ave 5 c++ unions language-lawyer
联合可以像类和结构一样用作类型(有一些限制)。它可以有成员函数。它可以用作 OOP 构造。
据我所知,联合只是被导入到 C++ 中以保持与 C 的向后兼容性。
在这些年的编程中,我从未像使用类或结构作为 OOP 构造那样使用联合。
Union 是否有任何实际用途作为 OOP 构造(不仅仅是作为数据类型),或者它只是语言的一些残留部分,从来没有用过?
编辑:
该标准绝对允许联合充当 OOP 构造。它允许在联合中使用成员函数。以下代码编译和工作并且符合标准:
union A
{
int a;
int k;
void doSomething(){}
};
int main()
{
A obj;
int i = obj.a;
obj.doSomething();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果标准不应该充当 OOP 构造,为什么标准允许联合中的成员函数?
请发布具有特定推理的答案,并且请不要发布我不这么认为的答案,如果没有很好的理由推理?
不,联合不是面向对象的构造。
OO 最重要的一个特性是多态性,但联合不能参与继承关系(不能是不同类型的基,不能有基本身)或具有虚函数。联合的唯一目的是提供数据类型,而不是对象。