一,C下的struct
typedef struct _Sname{
int x;
signed char y;
...
}Sname;
1. 就是结构,很简单的结构,可以有成员数据。
2. 不能有成员函数,更不能有class下面的构造和析构函数了。
二,C++下面的class
class Cname{
private:
int x; //成员数据
signed char y;
public:
Cname(); //构造函数
~Cname(); //解构函数
...
};
1. class的目标是给程序员提供能定义像int等内部数据类型一样工作的手段。
2. class的基本思想是将类的非必要的细节(内部数据结构)与类本身的特性(外部操作接口)分开,其形式就是提供用户操作的界面。
三,C++下的struct
typedef struct C2name{
int x; //成员数据
signed char y;
C2name(); //构造与解构
~C2name();
void fun(int x, int y); //成员函数
...
};
1. 按照C++标准的定义,struct就是类。所以在C++下struct根class一样可以有成员函数,包括构造与解构函数,甚至可以按照面相对象的技术完成继承与派生。
2. struct与class不同的情况在于默认情况下,struct的所有成员都是public的,而class默认情况下是private的。
四,另外的话
1. 在C++下,尽量把struct当作一般的结构来用,而把class当作面向对象的类来用,尽管他们几乎是没有差别的。
2. 在C下,可以用struct写出类似class的东西,即将所数据封装在一个struct中作为成员数据,另外再写对这个struct的操作函数,这些函数是全局的,他们调用pThis指针来操作具体的对象。当然这永远都只能是类似class的东西。如下:
typedef struct _SName{
int x;
int y;
} SName;
SName *SNmae_New(){
SName *pThis = (SName*)malloc(sizeof(SName));
...
return pThis;
}
void SNmae_Delete(SName *pThis){
free(pThis);
...
}
void SNmae_Operator1(SName *pThis){
...
}
五,union的相关
1. C下的union功能很单一。
2. C++下的union实际上是介于C中union和C++中class之间的一种结构,他同class一样可以有自己的成员函数,但是不能有static的函数,也不能有construct和destruct。
3. 尽管C++下的union也能当作类来用,但是这并不是很好的方法,这并不能很好的体现union的设计初衷,通常都将union的外层在封装一个class。