1,通過不停的改進,結構體 struct 變得原來越不像它在 C 語言中的樣子了;函數
1,struct 在 C 語言中僅爲了定義一個變量的集合,僅此而已,不能定義函數;spa
2,struct 在 C++ 中既能夠定義訪問級別又能夠定義成員函數;設計
2,類的關鍵字:code
1,struct 在 C 語言中已經有了本身的含義,必須繼承兼容;對象
1,而在 C++ 中有了別的含義,違背了設計 C++ 兼容 C 的初衷;blog
2,尋找新的關鍵字來定義類;繼承
2,在 C++ 中提供了新的關鍵字 class 用於類定義;接口
3,class 和 struct 的用法是徹底相同的,但只有一個本質區別,以下;開發
1,在使用 struct 定義類時,全部成員的默認訪問級別爲 public;get
2,在用 class 定義類時,全部成員的默認訪問級別爲 private;
3,class 的初探:
1 #include <stdio.h> 2 3 struct A 4 { 5 // defualt to public 6 int i; 7 // defualt to public 8 int getI() 9 { 10 return i; 11 } 12 }; 13 14 class B // 之後開發中,只使用這個關鍵自定義類; 15 { 16 // defualt to private 17 int i; 18 // defualt to private 19 int getI() 20 { 21 return i; 22 } 23 }; 24 25 int main() 26 { 27 A a; 28 B b; 29 30 a.i = 4; 31 32 printf("a.getI() = %d\n", a.getI()); 33 34 b.i = 4; 35 36 printf("b.getI() = %d\n", b.getI()); 37 38 return 0; 39 }
4,小實例:
1,需求:開發一個用於四則運算的類:
1,提供 setOperator 函數設置運算類型;
2,提供 setParameter 函數設置運算參數;
3,提供 result 函數進行運算:
1,其返回值表示運算的合法性;
2,經過引用參數返回結果;
2,客戶關心使用、不關心實現、簡單易用就好,類的開發者關心類如何實現、內部實現方式;
3,既然類分爲外部接口(使用方式)和內部實現(實現細節)兩部分,則最終的源代碼上也應該有所體現;
5,類的真正形態:
1,C++ 中的類支持聲明(類的使用方式)和實現(類實現的內部細節)的分離;
2,使用頭文件和源文件的方式來將類的實現和定義分開:
1,*.h 頭文件中只有類的聲明:
1,成員變量和成員函數的聲明,不包括成員函數體的實現;
2,*.cpp 源文件中完成類的其它實現:
1,成員函數的具體實現;
6,Operator 類的分析:
1,*.h 文件:
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
1,僅僅是類的聲明而已,表達的也就是用戶的需求,僅僅是如何使用這個類;
2,*.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,考慮的是這個類的這些函數功能該如何實現;
3,類的使用:
1 #include <stdio.h> 2 #include "Operator.h" 3 4 int main() 5 { 6 Operator op; 7 double r = 0; 8 9 op.setOperator('/'); 10 op.setParameter(9, 3); 11 12 if( op.result(r) ) 13 { 14 printf("r = %lf\n", r); 15 } 16 else 17 { 18 printf("Calculate error!\n"); 19 } 20 21 return 0; 22 }
1,編寫 main() 函數的函數體時,實際上是在使用一個類,可是沒有關心它是怎麼實現的,僅僅是調用公開的成員函數這些公開的成員函數就是這個 Operator 類的使用方式;
2,使用類的方式:定義這個類的對象並經過對象來調用共有成員變量或者成員函數;
7,小結:
1,C++ 引進了新的關鍵字 class 用於定義類;
1,今後後只使用 class 定義類(通常的);
2,struct 只用來表示變量的集合(通常的),表明一個結構體;
2,struct 和 class 的區別在於默認訪問級別的不一樣;
3,C++ 中的類支持聲明和實現的分離,意義在於分兩個角度來看待類,一個是聲明的角度、一個是實現的角度:
1,在頭文件中聲明類;
1,類的使用方式;
2,在源文件中實現類;
1,類的實現細節;
3,在具體開發中,在 C++ 的頭文件裏面來作類的聲明,在 C++ 的源文件裏面來作類的具體實現;