typedef struct,自定义数据类型struct和类的区别

来源:互联网 发布:shop 4.0 源码下载 编辑:程序博客网 时间:2024/06/06 04:46

 

typedef struct,自定义数据类型struct和类的区别

引用大牛的

typedef structstruct区别:

自定义数据结构类型:

struct  类名{类体};

C语言中的结构体:

typedef struct 名字{结构体体}别名;标注的是类型,类似于int等类型。

区别:

 1 首先://注意在CC++里不同
    在C中定义一个结构体类型要用typedef:
    typedef struct Student
    {
    int a;
    }Stu;
    于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明)
    这里的Stu实际上就是struct Student的别名。Stu==struct Student
    另外这里也可以不写Student(于是也不能structStudent stu1;了,必须是Stu stu1;)例如:
    typedef struct
    {
    int a;
    }Stu;

    但在c++里很简单,直接
    struct Student
    {
    int a;
    };    
    于是就定义了结构体类型Student,声明变量时直接Studentstu2

  2.其次:
    在c++中如果用typedef的话,又会造成区别:
    struct Student
    {
    int a;
    }stu1;//stu1是一个变量


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

    使用时可以直接访问stu1.a
    但是stu2则必须先 stu2 s2;
    然后 s2.a=10;

//////////////

自定义数据类型struct和类的区别

区别结构是一种用关键字struct声明的自定义数据类型。与类相似,也可以包含构造函数,常数,字段,方法,属性,索引器,运算符和嵌套类型等,不过,结构是值类型。

结构体和类的区别

1.C的结构体和C++结构体的区别

   1.1 C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数、和this指针的。

   1.2 C的结构体对内部成员变量的访问权限只能是public,而C++允许public,protected,private三种。

   1.3 C语言的结构体是不可以继承的,C++的结构体是可以从其他的结构体或者类继承过来的。

   以上都是表面的区别,实际区别就是面向过程面向对象编程思路的区别:

       C的结构体只是把数据变量给包裹起来了,并不涉及算法。

       而C++是把数据变量及对这些数据变量的相关算法给封装起来,并且给对这些数据和类不同的访问权限。

   C语言中是没有类的概念的,但是C语言可以通过结构体内创建函数指针实现面向对象思想。

2.C++的结构体和C++类的区别

   2.1 C++结构体内部成员变量及成员函数默认的访问级别是public,而c++类的内部成员变量及成员函数的默认访问级别是private

   2.2 C++结构体的继承默认是public,而c++类的继承默认是private

//////////////

什么时候用结构呢结构使用简单,并且很有用,但是要牢记:结构在堆栈中创建,是值类型,而类是引用类型。每当需要一种经常使用的类型,而且大多数情况下该类型只是一些数据时,使用结构能比使用类获得更佳性能。

//////////////////////

结构是值类型,所以会影响性能,但根据使用结构的方式,这种影响可能是正面的,也可能是负面的。正面的影响是为结构分配内存时,速度非常快,因为它们将内联或者保存在堆栈中。在结构超出了作用域被删除时,速度也很快。另一方面,只要把结构作为参数来传递或者把一个结构赋给另一个结构(例如A=B,其中AB是结构),结构的所有内容就被复制,而对于类,则只复制引用。这样,就会有性能损失,根据结构的大小,性能损失也不同。注意,结构主要用于小的数据结 构。但当把结构作为参数传递给方法时,就应把它作为ref参数传递,以避免性能损失——此时只传递了结构在内存中的地址,这样传递速度就与在类中的传递速 度一样快了。另一方面,如果这样做,就必须注意被调用的方法可以改变结构的值。

还有一点:struct与class本质上应该是相同的,只是默认的访问权限不同struct默认是publicclass默认是private ).之所以要保留struct,很大一部分原因是为了与C兼容吧(C++的一篇文章中是这么说的,我感觉还是有一定的道理. class感觉是应该是struct的扩充,除了可以设置成员的访问类型外,还可以有自己的成员函数,可以继承派生等,好象struct能做的class都能做,但反过来就不行了,如果没有保护数据的要求,struct能做的我都用struct做,比较简单。

可以将C中的结构体改变为struct类型。下面是图结构的例子:

#define MAX 20

struct  ArcNode

{

       int adjvex;//所指向的顶点的位置

       int w;//权值

       struct ArcNode *nextarc;//指向下一条弧的指针

};

 

struct VNode

{

       int data;//顶点信息

       int eNode;//边的条数

       ArcNode *firstarc;//指向第一个弧

 

};

 

struct myGraph

{

       VNode vertices[MAX];//结点数组

       int nodeNum;

};

0 0