结构与类,C和C++

来源:互联网 发布:香蕉网络电视tv少女 编辑:程序博客网 时间:2024/05/17 22:45

一,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。

 

原创粉丝点击