C++问题!请高手指点下!(100分)

Builder284 2003-10-14 07:05:46
?联合不能用作任何类的基类,也不能从任何类中派生出联合。(因为联合在特定的时间只有一个数据成员处于激活的状态)联合中也不能说明虚函数?
为什么呀!我想不明白,请各位高手指点下好吗?
无名联合不能有成员函数,因为无名联合中成员的作用域在联合之外?
等待回复中。。。。。。。。。。
...全文
29 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
akiko 2003-10-14
  • 打赏
  • 举报
回复
union中的每个数据成员都在相同的内存地址开始,同一时刻只有一个成员可以被赋值.union的大小是union中最大的数据成员的大小.
bluebohe 2003-10-14
  • 打赏
  • 举报
回复
联合不同于结构,所有成员都在一个地址中
rainbowinfog 2003-10-14
  • 打赏
  • 举报
回复
C++支持匿名联合,即:定义一个没有确定类型的无名类。这种特殊的联合只能包含非static数据成员;也不能定义构造函数、析构函数、或者其它什么成员函数。当在一个命名空间中声明匿名联合时(例如:在全局空间中),它就被声明为static类型。
下面是匿名联合的形式:

union //没有名字
{

//…member

};//没有实例

匿名联合主要用来节约空间。例如:当你或者用ID,或者用关键字来确认雇员的身份,但是并不是同时使用上面两者时。一个同时含有ID和关键字的匿名联合就能够保证:在任何时刻,只有其中一项能够被使用。这是因为联合的成员数据储存在同一段地址上,相互覆盖。

union
{
int ID;
char* name;
};
ID = 1234;
retrieve_emp(ID, employee);

注意,你可以直接访问成员数据,就好像它们在联合外面声明的一样。
匿名联合的另一个用途是:自动类型转换(自动类型转换是不安全的)。例如:当要把一个指针看作十进制数时,你可以如下面的联合一样声明。

int some_val;
union
{
void *p;
int n;
};

p = &some_val;
现在没有必要把指针显式的转为int类型的:
str::cout << ”address of p is:” << n << std::endl;

--------------------------------------------------------------------------------
本文作者Danny Kalev 是一个系统分析家、软件工程师,在C++和面向对象设计方面有着14年的专业经验。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧