c++结构体结构与共用体联盟是什么

  介绍

小编给大家分享一下c++结构体结构与共用体联盟是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

编码运行环境:VS2017 + Win32 +调试,Win32表示生成32位的应用程序。

结构体(结构)与共用体(联盟)是C语言中就已经存在的数据类型,c++对他们进行了扩充,最大的变化是允许在结构和公用体中定义成员函数。下面将通过实例讲解二者的特性和用法。

<强> 1。struct

以下是一个使用了结构体的c++程序。

 # include & lt; iostream>
  使用名称空间性病;
  
  结构体的房间
  {
  int地板;
  int没有;
  };
  
  结构体的学生
  {
  int年龄;
  int分数;
  学生(int, int) {
  年龄=;
  分数=s;
  }
  };
  
  int主要(int命令行参数个数,char * argv [])
  {
  
  房间r [3]={{1101}、{2201}、{3301}};
  学生年代(89);
  cout<& lt;“房间是:“
  cout<& lt; r [0] .floor<& lt;“产生绯闻;& lt; & lt; r [0] .No<& lt;““;
  cout<& lt; r [1] .floor<& lt;“产生绯闻;& lt; & lt; r [1] .No<& lt;““;
  cout<& lt; r [2] .floor<& lt;“产生绯闻;& lt; & lt; r [2] .No<& lt; endl;
  cout<& lt;“学生# 39;年龄:“& lt; & lt; s.age<& lt;“得分:“& lt; & lt; s.score<& lt; endl;
  获取字符();
  }

程序运行结果:

房间:1 - 101 2 - 201 3 - 301
学生# 39;年龄:18分数:89

阅读以上程序,在c++中使用结构体需要注意以下几点:

, (1) c++中,结构体是一种真正的数据类型,在利用结构定义变量时,不需要像在C中带上struct关键字,或先使用typedef struct structname structalias的方式进行申明。

(2) c++中对C的结构进行了扩充,允许在结构体中定义成员函数.struct中的成员变量和成员函数也有访问权限,在类中,默认的访问权限是私人的,而在结构体中默认访问权限是公开的,这是结构体和类的唯一区别.struct成员的默认访问权限设为公共是c++保持与C语言兼容而采取的一项策略。

(3)如果结构中没有显示定义任何构造函数,那么结构变量可以像在C语言中那样用花括号顺序指明数据成员的值来进行初始化。但是一旦显示定义了任何一个构造函数,就不能用这种方式初始化了。如果在类中只有若干公共型的数据成员,而没有显示定义任何构造函数,也可以使用花括号进行初始化。

(4)用sizeof运算符计算结构的大小时,要考虑结构体内部变量的对齐问题。

<强> 2.联盟

共用体(联盟),又名联合体,是一种特殊的类,从C语言章继承而来,其基本语义没有发生什么变化,只是具有了类的一些特性(允许定义成员函数)。在实际的编程实践中,使用频率没有结构高。与结构相比,最显著的区别是联盟的数据成员共享同一段内存,以达到节省空间的目的。

<强> 2.1联盟的基本性质

通过如下程序考察联盟变量的占用空间,成员赋值时的相互影响。

 # include & lt; iostream>
  使用名称空间性病;
  联盟testunion
  {
  字符c;
  int我;
  };
  
  int主要(int命令行参数个数,char * argv [])
  {
  cout<& lt; sizeof (testunion) & lt; & lt; endl;
  testunion * pt=新testunion;
  char * p=reinterpret_cast 

程序运行结果:


-51 -51 -51 -51
-842150451

65 -51 -51 -51 -842150591

可以看的出,联盟testunion变量的体积是4,它是由两个数据成员中体积较大的一个(int)类型来决定的。对其中一个数据成员的修改,一定会同时改变所有其他数据成员的值。不过对体积较小的数据成员的修改,只会影响到该成员应该占用的那些字节,对超出部分(高位字节)没有什么影响。

<强> 2.2联盟的高级特性

观察如下程序。

 # include & lt; iostream>
  使用名称空间性病;
  结构体的学生
  {
  int年龄;
  int分数;
  学生(int, int)
  {
  年龄=;
  分数=s;
  }
  };
  
  联盟testunion
  {
  字符c;
  int我;
  };
  
  类someClass
  {
  int num;
  公众:
  空白显示(){cout

c++结构体结构与共用体联盟是什么