您好,登錄后才能下訂單哦!
我們之前在 C++ 中表示類的時候,是用 struct 表示的。那么經過這些改進,結構體 struct 變得越來越不像它在 C 語言中的樣子了。因此在 C++ 總提供了新的關鍵字 class 用于類定義,class 和 struct 的用法是完全相同的。
那么 class 和 struct 有什么區別呢?在用 struct 定義類時,所以的成員默認訪問級別為 public;在用 class 定義類時,所有的成員的默認訪問級別為 private。我們來以代碼為例進行分析
#include <stdio.h> struct A { // default to public int i; // default to public int getI() { return i; } }; class B { // default to private int i; // default to private int getI() { return i; } }; int main() { A a; B b; a.i = 2; printf("a.getI() = %d\n", a.getI()); b.i = 3; printf("b.getI() = %d\n", b.getI()); return 0; }
我們分別用 struct 和 class 定義了類A 和 類B,我們分別給它們的 i 進行賦值,再調用 getI 函數進行打印。依照我們之前所說的,類B 的應該打印會出錯,我們看看編譯結果
我們看到它確實報錯了,說類B 中的成員是私有的。我們在第 17 行聲明為 public,再次編譯
我們看到這次編譯通過,并且成功的打印出它們的值了。
下來我們開發一個用于四則運算的類:提供 setOperator 函數設置運算類型;提供 setParameter 函數設置運算參數;提供 result 函數進行運算,其返回值表示運算的合法性,通過引用參數返回結果。在 C++ 中的類支持聲明和實現的分離,也就是將類的實現和定義分開。 .h 頭文件中只有類的聲明:成員變量和成員函數的聲明。 .cpp 源文件中完成類的其它實現:成員函數的具體實現。
Operator.h 源碼
#ifndef _OPERATOR_H_ #define _OPERATOR_H_ class Operator { private: char mOp; double mP1; double mP2; public: bool setOperator(char op); void setParameter(double p1, double p2); bool result(double& r); }; #endif
Operator.cpp 源碼
#include "Operator.h" bool Operator::setOperator(char op) { bool ret = false; if( (op == '+') || (op == '-') || (op == '*') || (op == '/') ) { ret = true; mOp = op; } else { mOp = '\0'; } return ret; } void Operator::setParameter(double p1, double p2) { mP1 = p1; mP2 = p2; } bool Operator::result(double& r) { bool ret = true; switch( mOp ) { case '/': if( (-0.000000001 < mP2) && (mP2 < 0.000000001) ) { ret = false; } else { r = mP1 / mP2; } break; case '+': r = mP1 + mP2; break; case '*': r = mP1 * mP2; break; case '-': r = mP1 - mP2; break; default: ret = false; break; } return ret; }
test.cpp 源碼
#include <stdio.h> #include "Operator.h" int main() { Operator op; double r = 0; op.setParameter(9, 3); op.setOperator('/'); if( op.result(r) ) { printf("r = %lf\n", r); } else { printf("Calculate error!\n"); } return 0; }
我們編譯下看看是否如我們所愿
我們看到已經正確執行,那么我們看到頭文件和實現的源文件分開來,代碼可維護性提高了。test.cpp 文件中寫的代碼很少,很清晰。這便是聲明和實現分離的效果了。通過對類的學習,總結如下:1、C++ 引進了新的關鍵字 class 用于定義類,struct 和 class 的區別在于默認訪問級別不同;2、在 C++ 中的類支持聲明和實現的分離:在頭文件中聲明類,在源文件中實現類。
歡迎大家一起來學習 C++ 語言,可以加我QQ:243343083。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。