在之前學習的C++章節里,可以發現結構體越來越不像C語言里的結構體了
比如,里面可以定義函數,可以定義private/public,結構體名還可以指向父類.
但是C++需要兼容C,所以C++中便提供了新的關鍵字class用來定義類
class
關鍵字class和struct用法完全相同(struct A == class B)
class與struct區別(如下圖)
在struct中,所有成員的默認訪問級別為pubilc
在class中,所有成員的默認訪問級別為private
在以后的學習里,就專門使用class來定義類了,接下來做一個類
小實例-開發一個用於四則運算的類
-提供setOperator函數設置運算類型
-提供setParameter函數設置運算參數
-提供result函數進行運算
- 返回值表示運算的合法性
- 通過引用參數返回結果
通過operator.h頭文件聲明類,通過operator.cpp源文件來實現類
operator.h文件
#ifndef _OPERATOR_H_ #define _OPERATOR_H_ class Operator { private: char memOp; double memP1; double memP2;
public: bool SetOperator(char Op); void SetParameter(double P1,double P2); bool result(double & val); }; #endif
operator.cpp文件
#include "operator.h" bool Operator::SetOperator(char Op) { bool err=false; if(Op == '+'||Op == '-'||Op == '*'||Op == '/') { memOp= Op; err=true; } return err; } void Operator::SetParameter(double P1,double P2) { memP1=P1; memP2=P2; }
bool Operator::result(double & val) { bool err=true; switch(memOp) { case '+': val = memP1+memP2; break; case '-': val = memP1-memP2; break; case '*': val = memP1*memP2; break; case '/': if( (-0.000000001 < memP1) && (memP2 < 0.000000001) ) { err= false; } else { val = memP1/memP2; } break; default: err=false; break; } return err; }
Test.cpp文件
#include <stdio.h> #include "operator.h" int main() { Operator Op; double val=0; Op.SetOperator('/'); Op.SetParameter(9,3); if(Op.result(val)) { printf("val=%lf\n",val); } else { printf("CALL ERR\n"); } return 0; }
編譯運行:
小結
- C++引進了新的關鍵字class定義類
- struct和class區別在於默認訪問級別不同