C 和C++结构体的区别

结构体里是不是不能定义函数
答:
c中不能(可以采用函数指针的方式),c++里可以在结构体内定义函数,用法和class定义类是一样的(说明:C++里为了凸显面向对象的特性,故意将结构体淡化了,对于一些小工程,C++里使用结构体编程反倒有优势),
说穿了struct 和 class用法相同(C++里的结构体非常好用,直接在内部用函数对相应的变量初始化,但要在调用时才会触发初始化),
但要注意的一点是,struct默认的是public类型,而class默认的是private类型的。
注:在C++里,结构体与类几乎等同

C的例子:

typedef void (*pFunsm_run)(unsigned char sm_id, unsigned char dir, unsigned int max_speed, unsigned long Distense);
typedef void (*pFunsm_stop)(unsigned char sm_id);
typedef void (*pFunsm_sreak)(unsigned char sm_id);
typedef void (*pFunsm_set_enable)(unsigned char sm_id, bool enable_flag);

typedef struct _stOpCtrl
{
 unsigned char mEn;      // 功能动作允许
...        
  pFunsm_stop                                     stop_sm;
  pFunsm_run                                        run_sm;
  pFunsm_sreak                                   break_sm;
  pFunsm_set_enable                        set_enable_sm; 
} stOpCtrl;

 

stOpCtrl opration;

opration. stop_sm = sm_stop;

opration. run_sm = sm_run;

opration. break_sm = sm_break;

opration.  set_enable_sm= sm_ set_enable;

接下来就可以用函数指针调用了(参数我就不写了)

opration. stop_sm();

opration. run_sm();

opration. break_sm();

opration. set_enable_sm();

 

C++例子:

typedef struct _GLOBAL_OBJECT{

/*成员变量*/
 CDialog* mDlg;

 BOOL IsToReset;  //是否需要复位
 BOOL IsResetOK;  //是否复位完成

 ... 

 _GLOBAL_OBJECT()                //构造函数
 {
  mDlg  =NULL;
  IsToReset =FALSE;  
  IsResetOK =FALSE;

...
 }
 ~_GLOBAL_OBJECT()                 //析构函数
 {
  //OutputDebugString("%%%%%%%%%%%%%%%%%%%%%%%%%%");
  for (int i=0; i<nMaxCardNub;i++)
  {
   if(NULL != m_pCard[i])
    delete m_pCard[i];
   m_pCard[i]=NULL;
  }
       //OutputDebugString("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
  delete pBufForRecvCmd;
  pBufForRecvCmd =NULL;
 } 
 CString IniFile(){//成员函数
  CString strIniFile;
  strIniFile.Format("%s",cIniFile);
  return strIniFile;
 };
 CardObj* GetCardObject()    //成员函数
 {
  for (int i=0;i<nMaxCardNub;i++)
  {
   if(!m_pCard[i]->IsUse)
   {
    m_pCard[i]->IsUse=TRUE;
    return m_pCard[i];
   }
  }
  return NULL;
 }

 void ReleaseCardObject(CardObj*  pCardObj)      //成员函数
 {
  pCardObj->Init();
 }

}GLOBAL_OBJECT,*PGLOBAL_OBJECT;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值