我們之前在 C++ 中表示類(lèi)的時(shí)候,是用 struct 表示的。那么經(jīng)過(guò)這些改進(jìn),結(jié)構(gòu)體 struct 變得越來(lái)越不像它在 C 語(yǔ)言中的樣子了。因此在 C++ 總提供了新的關(guān)鍵字 class 用于類(lèi)定義,class 和 struct 的用法是完全相同的。
創(chuàng)新互聯(lián)建站長(zhǎng)期為上千家客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為桂林企業(yè)提供專(zhuān)業(yè)的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作,桂林網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。那么 class 和 struct 有什么區(qū)別呢?在用 struct 定義類(lèi)時(shí),所以的成員默認(rèn)訪(fǎng)問(wèn)級(jí)別為 public;在用 class 定義類(lèi)時(shí),所有的成員的默認(rèn)訪(fǎng)問(wèn)級(jí)別為 private。我們來(lái)以代碼為例進(jìn)行分析
#includestruct 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 定義了類(lèi)A 和 類(lèi)B,我們分別給它們的 i 進(jìn)行賦值,再調(diào)用 getI 函數(shù)進(jìn)行打印。依照我們之前所說(shuō)的,類(lèi)B 的應(yīng)該打印會(huì)出錯(cuò),我們看看編譯結(jié)果
我們看到它確實(shí)報(bào)錯(cuò)了,說(shuō)類(lèi)B 中的成員是私有的。我們?cè)诘?17 行聲明為 public,再次編譯
我們看到這次編譯通過(guò),并且成功的打印出它們的值了。
下來(lái)我們開(kāi)發(fā)一個(gè)用于四則運(yùn)算的類(lèi):提供 setOperator 函數(shù)設(shè)置運(yùn)算類(lèi)型;提供 setParameter 函數(shù)設(shè)置運(yùn)算參數(shù);提供 result 函數(shù)進(jìn)行運(yùn)算,其返回值表示運(yùn)算的合法性,通過(guò)引用參數(shù)返回結(jié)果。在 C++ 中的類(lèi)支持聲明和實(shí)現(xiàn)的分離,也就是將類(lèi)的實(shí)現(xiàn)和定義分開(kāi)。 .h 頭文件中只有類(lèi)的聲明:成員變量和成員函數(shù)的聲明。 .cpp 源文件中完成類(lèi)的其它實(shí)現(xiàn):成員函數(shù)的具體實(shí)現(xiàn)。
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#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; }
我們編譯下看看是否如我們所愿
我們看到已經(jīng)正確執(zhí)行,那么我們看到頭文件和實(shí)現(xiàn)的源文件分開(kāi)來(lái),代碼可維護(hù)性提高了。test.cpp 文件中寫(xiě)的代碼很少,很清晰。這便是聲明和實(shí)現(xiàn)分離的效果了。通過(guò)對(duì)類(lèi)的學(xué)習(xí),總結(jié)如下:1、C++ 引進(jìn)了新的關(guān)鍵字 class 用于定義類(lèi),struct 和 class 的區(qū)別在于默認(rèn)訪(fǎng)問(wèn)級(jí)別不同;2、在 C++ 中的類(lèi)支持聲明和實(shí)現(xiàn)的分離:在頭文件中聲明類(lèi),在源文件中實(shí)現(xiàn)類(lèi)。
歡迎大家一起來(lái)學(xué)習(xí) C++ 語(yǔ)言,可以加我QQ:243343083。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。