struct总结

struct 定义在C++与C中的区别

1,定义方式不同
C中struct定义方式

typedef struct tagS{
//
}S;

在c中Struct是用户自定义数据类型(UDT)。

c++中可以写成

struct S{
//
};

在c++中Struct是抽象数据类型(ADT),支持成员函数的定义。并且增加了访问权限

2, 在C/C++中使用typedef:

 typedef struct Student
  {
  int a;
  }Stu;

  于是在声明变量的时候就可:Stu stu1;

  如果没有typedef就必须用struct Student stu1;来声明

  这里的Stu实际上就是struct Student的别名。

在c++中如果用typedef的话,又会造成区别:

  struct   Student
  {
  int   a;
  }stu1;//stu1是一个变量
  typedef   struct   Student2
  {
  int   a;
  }stu2;//stu2是一个结构体类型

  使用时可以直接访问stu1.a

  但是stu2则必须先   stu2 s2;

  然后               s2.a=10;

3,在c++中struct可以直接赋值

struct POINT {   // Declare POINT structure
   int x;   // Define members x and y
   int y;
} spot = { 20, 40 }; 
c++中不使用typedef ,struct成员会默认初始化
3,在c和c++中使用typedef

如果在c程序中我们写:

 typedef struct
  {
  int num;
  int age;
  }aaa,bbb,ccc;

这相当于

typedef struct
  {
  int num;
  int age;
  }aaa;
  typedef aaa bbb;
  typedef aaa ccc;

  也就是说aaa,bbb,ccc三者都是结构体类型。声明变量时用任何一个都可以,在c++中也是如此。但是你要注意的是这个在c++中如果写掉了typedef关键字,那么aaa,bbb,ccc将是截然不同的三个对象。



在标准C++中,struct和class有两个区别:

第一:struct中的成员默认是public的,class中的默认是private的。 
第二:在用模版的时候只能写template <class Type>或template <typename Type>不能写template <struct Type>。
第三:关于使用大括号初始化
class和struct如果定义了构造函数的话,都不能用大括号进行初始化
如果没有定义构造函数,struct可以用大括号初始化。
如果没有定义构造函数,且所有成员变量全是public的话,可以用大括号初始化。
第四:关于继承
把C++要交换到C程序的数据在C++程序中声明成一个struct,然后根据C++中程序的语意选择继承或者聚合这个struct,然后在使用的时候就可以把这个struct封装起来传递到C中或者从C中传递到C++。(注:在深入探索C++对象模型中建议使用聚合,而不是继承,原因是为了和C语言的空间分布兼容
struct person
{
       int age;
       char name[20];
};

class male
{
      private:
              int wife;
              struct person per;

      public:
             int getAge()
             {
                return per.age; 
              }

};

 
参考微软msdn上的struct写法, http://msdn.microsoft.com/en-us/library/64973255(v=VS.90).aspx
没明白意思
struct CELL {   // Declare CELL bit field
   unsigned short character  : 8;  // 00000000 ????????
   unsigned short foreground : 3;  // 00000??? 00000000
   unsigned short intensity  : 1;  // 0000?000 00000000
   unsigned short background : 3;  // 0???0000 00000000
   unsigned short blink      : 1;  // ?0000000 00000000
} screen[25][80];       // Array of bit fields 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值