類的真正形態(上)函數
問題:通過不停的改進,結構體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++中的類支持聲明和實現的分離
在頭文件中聲明類
在源文件中實現類