typedef struct,自定义数据类型struct和类的区别
来源:互联网 发布:shop 4.0 源码下载 编辑:程序博客网 时间:2024/06/06 04:46
typedef struct,自定义数据类型struct和类的区别
引用大牛的
typedef struct和struct区别:
自定义数据结构类型:
struct 类名{类体};
C语言中的结构体:
typedef struct 名字{结构体体}别名;标注的是类型,类似于int等类型。
区别:
1 首先://注意在C和C++里不同
在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,其中A和B是结构),结构的所有内容就被复制,而对于类,则只复制引用。这样,就会有性能损失,根据结构的大小,性能损失也不同。注意,结构主要用于小的数据结 构。但当把结构作为参数传递给方法时,就应把它作为ref参数传递,以避免性能损失——此时只传递了结构在内存中的地址,这样传递速度就与在类中的传递速 度一样快了。另一方面,如果这样做,就必须注意被调用的方法可以改变结构的值。
还有一点:struct与class本质上应该是相同的,只是默认的访问权限不同(struct默认是public,class默认是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 da
int eNode;//边的条数
ArcNode *firstarc;//指向第一个弧
};
struct myGraph
{
VNode vertices[MAX];//结点数组
int nodeNum;
};
- typedef struct,自定义数据类型struct和类的区别
- typedef struct和struct的区别
- typedef struct和struct的区别
- struct和typedef struct的区别
- struct和typedef struct的区别
- typedef struct和struct的区别
- struct和typedef struct的区别
- typedef struct 和 struct 的区别
- struct和typedef struct的区别
- struct和typedef struct的区别
- struct和typedef struct的区别
- 【VC】typedef struct 和 struct 的区别
- struct 和typedef struct的区别
- struct和typedef struct的区别
- struct和typedef struct的区别
- typedef struct 和 struct的区别
- struct和typedef struct的区别
- typedef struct和struct的区别
- man page
- 直接初始化和拷贝初始化
- 查看文件的内容
- cin和cout返回值问题
- 翻页查看文件,数据选取,非纯文本文件查看
- typedef struct,自定义数据类型struct和类的区别
- 使用类的好处
- string有关函数
- 通过RFC(C#)连接SAP系统
- 计数排序
- 产生随机数的方法:
- 修改文件时间或者创建新文件:touch
- vector(1)
- Bitmap