现在的位置: 首页 > 综合 > 正文

C结构体、C结构体 和 C++类的区别

2019年01月02日 ⁄ 综合 ⁄ 共 2949字 ⁄ 字号 评论关闭

from : http://hi.baidu.com/smallbigwang/item/137fff9785a82bb3cd80e58e

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++类的区别

 

一、相同之处:结构体中可以包含函数;也可以定义public、private、protected数据成员;定义了结构体之后,可以用结构体名来创建对象。但C中的结构体不允许有函数;也就是说在C++当中,结构体中可以有成员变量,可以有成员函数,可以从别的类继承,也可以被别的类继承,可以有虚函数。

二、不同之处:结构体定义中默认情况下的成员是public,而类定义中的默认情况下的成员是private的。
实际上,C中的结构体只涉及到数据结构,而不涉及到算法,也就是说在C中数据结构和算法是分离的,而到C++中一类或者一个结构体可以包含函数(这个函数在C++我们通常中称为成员函数),C++中的结构体和类体现了数据结构和算法的结合。

例如:

struct CHGROUP
{
        unsigned short LOOPNum;
        unsigned short SPKMICNum;
        unsigned short MONITORNum;
        unsigned short TBNum;
        unsigned short AGENTNum;
        unsigned short HBNum;
        unsigned short VOIPNum;
private:
        CH *pLOOP; 
        CH *pSPKMIC;
        CH *pMONITOR;
        CH *pTB; 
        CH *pAGENT;
        CH *pVOIP;
        CH *pHB; 
public:
        CHGROUP()
        {
                LOOPNum = SPKMICNum = MONITORNum = TBNum = AGENTNum = HBNum = VOIPNum = 0;
                pLOOP = pSPKMIC = pMONITOR = pTB = pAGENT = pHB = pVOIP = 0;
        }
      
        virtual ~CHGROUP()
        {
                if(LOOPNum) delete[]pLOOP;
                if(SPKMICNum) delete[]pSPKMIC;
                if(MONITORNum) delete[]pMONITOR;
                if(TBNum) delete[]pTB;
                if(AGENTNum) delete[]pAGENT;
                if(HBNum) delete[]pHB;
                if(VOIPNum) delete[]pVOIP;
        }

        void init(unsigned int type, unsigned int num)
        {
                if(num == 0)
                        return;
              
                CH *p = new CH[num];
              
                if(p==NULL)
                        return;

                switch(type)
                {
                case CHTYPE_LOOP:
                        pLOOP = p;
                        LOOPNum = num;
                        break;
                case CHTYPE_SPKMIC:
                        pSPKMIC = p;
                        SPKMICNum = num;
                        break;
                case CHTYPE_MONITOR:
                        pMONITOR = p;
                        MONITORNum = num;
                        break;
                case CHTYPE_TB:
                        pTB = p;
                        TBNum = num;
                        break;
                case CHTYPE_AGENT:
                        pAGENT = p;
                        AGENTNum = num;
                        break;
                case CHTYPE_HB:
                        pHB = p;
                        HBNum = num;
                        break;
                case CHTYPE_VOIP:
                        pVOIP = p;
                        VOIPNum = num;
                        break;
                default:
                        delete []p;
                        return;
                }
        }

      
上边是一个结构体,然后可以定义了struct CHGROUP chs;

调用函数来初始化
chs.init(CHTYPE_AGENT, num);

抱歉!评论已关闭.