(参考: スラスラわかるC++ 第2版, pp.175-180)
- データに関する処理は必ず当のクラスが提供することが望ましい。要するに
○インスタンス.函数()
という形で処理することが望ましく、
×インスタンス.public変数
という形でメンバー変数の読み書きができる状態は望ましくない。 - したがってメンバー変数は全部privateにすることが望ましく、privateな変数を読み書きする必要のある場合は、そのためのpublic函数(いわゆるgetterとsetter)をわざわざ作ることが望ましい。
#include <iostream> #include <string> using namespace std; class QbRate{ private: string Name; int Att, Comp, Yds, Td, Int; double Rate; double contain(double val); // 値が0~2.375の範囲から出ないようにするための函数。 public: double getRate(); string getName(); int getAtt(); int getComp(); int getYds(); int getTd(); int getInt(); QbRate(string Name, int Att, int Comp, int Yds, int Td, int Int); // コンストラクター }; double QbRate::contain(double val){ return fmax(0.0, fmin(val, 2.375)); } double QbRate::getRate(){ double Att = (double)this->Att; double Comp = (double)this->Comp; double Yds = (double)this->Yds; double Td = (double)this->Td; double Int = (double)this->Int; double a = contain( (Comp / Att - 0.3) * 5.0 ); double b = contain( (Yds / Att - 3.0) * 0.25 ); double c = contain( 20.0 * Td / Att ); double d = contain( 2.375 - 25.0 * Int / Att ); this->Rate = 100.0 * (a + b + c + d) / 6.0; this->Rate = round(this->Rate * 10.0) / 10.0; return this->Rate; } string QbRate::getName(){return this->Name;} int QbRate::getAtt() {return this->Att;} int QbRate::getComp(){return this->Comp;} int QbRate::getYds() {return this->Yds;} int QbRate::getTd() {return this->Td;} int QbRate::getInt() {return this->Int;} QbRate::QbRate(string Name, int Att, int Comp, int Yds, int Td, int Int){ // コンストラクターの実装 this->Name = Name; this->Att = Att; this->Comp = Comp; this->Yds = Yds; this->Td = Td; this->Int = Int; this->Rate; } int main(){ QbRate Seahawks("Wilson, Russell", 31, 21, 225, 2, 0); //QbRate Seahawks = QbRate(~); // もちろんこう書いてもよいが少し冗長。 cout << "Name: " << Seahawks.getName() << endl; cout << "Attempts: " << Seahawks.getAtt() << endl; cout << "Completions: " << Seahawks.getComp() << endl; cout << "Yards: " << Seahawks.getYds() << endl; cout << "Touchdowns: " << Seahawks.getTd() << endl; cout << "Interceptions: " << Seahawks.getInt() << endl; cout << "Passer Rating: " << Seahawks.getRate() << endl; system("pause"); return 0; }
wolfram:
FormulaData["FootballPasserRating", {"YARDS" -> 225, "ATT" -> 31, "COMP" -> 21, "TD" -> 2, "INT" -> 0}]