第16課類的真正形態

類的真正形態(上)函數

問題:通過不停的改進,結構體struct變得愈來愈不像它在C語言中的樣子了。
在C語言中,struct中是不能定義成員函數的,你若是實在想用成員函數,只能定義成函數指針的形式。這種方式在內核中太廣泛了。spa

struct 在C語言中已經有了本身的含義,所以C++也得必須繼續兼容,可是在兼容的基礎上又有了改進,好比說能夠定義成員函數了。
在C++中提供了新的關鍵字class用於類定義
class和struct的用法是徹底相同的指針

class和struct有什麼本質區別?
在用struct定義類時,全部成員的默認訪問級別爲public
在用class定義類時,全部成員的默認訪問級別爲privatecode

struct A
{
  //default to public
  int i;
  //default to public
  int getI()
  {
    return i;
  }
};blog

class A
{
  //default to private
  int i;
  //default to private
  int getI()
  {
    return i;
  }
};
好的習慣:無論是用class定義類,仍是用struct定義類,必須顯示的指明成員變量和成員函數的訪問級別。開發

類的真正形態(下)get

小實例
需求:開發一個用於四則運算的類
-提供setOperator函數設置運算類型
-提供setParameter函數設置運算參數
-提供result函數進行運算
  其返回值表示運算的合法性
  經過引用參數返回結果it

C++中的類支持聲明實現的分離
聲明就是類的使用方式,實現就是類的實現細節io

將類的實現和定義分開
-.h 頭文件中只有類的聲明
  .成員變量和成員函數的聲明
-.cpp源文件中完成類的其它實現
  .成員函數的具體實現

實例分析
Operator類的分析
Operator.hclass

 1 #ifndef _OPERATOR_H_  2 #define _OPERATOR_H_
 3 
 4 class Operator  5 {  6 private:  7     char mOp;  8     double mP1;  9     double mP2; 10     
11 public: 12     bool setOperator(char op); 13     void setParameter(double p1, double p2); 14     bool result(double& r); 15 }; 16 
17 #endif

Operator.cpp

 

 1 #include "Operator.h"
 2 
 3 bool Operator::setOperator(char op)  4 {  5     bool ret = false;  6         
 7     if( (op == '+') || (op == '-') || (op == '*') || (op == '/') )  8  {  9         ret = true; 10         mOp = op; 11  } 12     else
13  { 14         mOp = '\0'; 15  } 16         
17     return ret; 18 } 19 
20 void Operator::setParameter(double p1, double p2) 21 { 22     mP1 = p1; 23     mP2 = p2; 24 } 25     
26 bool Operator::result(double& r) 27 { 28     bool ret = true; 29         
30     switch( mOp ) 31  { 32         case '/': 33             if( (-0.000000001 < mP2) && (mP2 < 0.000000001) ) 34  { 35                 ret = false; 36  } 37             else
38  { 39                 r = mP1 / mP2; 40  } 41             break; 42         case '+': 43             r = mP1 + mP2; 44             break; 45         case '*': 46             r = mP1 * mP2; 47             break; 48         case '-': 49             r = mP1 - mP2; 50             break; 51         default: 52             ret = false; 53             break; 54  } 55         
56     return ret; 57 }

 

類已經定義好了,接下來進行類的使用

 1 #include <stdio.h>
 2 #include "Operator.h"
 3 
 4 int main()  5 {  6  Operator op;  7     double r = 0;  8     op.setOperator('/');  9     op.setParameter(9,3); 10     
11     if (op.result(r)) 12  { 13         printf("r = %lf\n",r); 14  } 15     else
16  { 17         printf("Calculate error!\n"); 18  } 19     
20     return 0; 21 }

小結:

C++引進了新的關鍵字class用於定義類
struct 和class的區別在於默認訪問級別的不一樣
C++中的類支持聲明和實現的分離
  在頭文件中聲明類
  在源文件中實現類

相關文章
相關標籤/搜索