class MathOperations{
public:
void Message();
void setA(int);
void setB(int);
int getA();
ing getB();
int getSum();
int getSub();
int getMul();
double getDiv();
double getSqrt();
private:
int a, b;
sum、sub、mul、division の値を格納する代わりに、A と B を設定してから答えを計算します。また、切り捨てが予想される場合を除き、除算は double または float を返す必要があります。これが意味することは、getDiv() が int を返し、a=1 と b=2 が返された場合、0 (1/2 = 0.5 は 0 に切り捨てられる) が返されるということです。 double または float を使用する必要があります。
getDiv() の実装例を次に示します。
double MathOperations::getDiv() {
double tempa = (double)this->a;
double tempb = (double)this->b;
return tempa/tempb;
}
現在の例を最適化する限り、次のようなことをしている場合:
class foo {
public:
void setA(int);
void setB(int);
int getA();
int getB();
private:
int A,B;
}
取得している唯一の真のオーバーヘッド (コンパイラがこのコードを最適化していないと仮定) は、変数を取得または設定するときに関数呼び出しをスタックに追加し、完了したらそれをポップして、変数のコピーを作成して返すことです。これは、最新のコンピューターでは無視できます。
編集:double tempa = (double)this->a
この小さなコード行では多くのことが行われています。分解して説明しましょう。
this->a
整数であるクラス a のローカルメンバーを参照します。クラスの詳細については、http ://www.cplusplus.com/doc/tutorial/classes/ をご覧ください。
(double)this->a
this->a
これから行う計算では、除算を行うときに 3.141519 のような適切な数を取得できるように、倍精度にしたいと考えています。これを行うcast
には double に変換します。基本的には、tempa に格納する前に整数をメモリ内の double に変換するようにコンパイラに指示します。データ型について詳しくはこちらをご覧ください: http://www.cplusplus.com/doc/tutorial/variables/型キャストについて詳しくはこちらをご覧ください: http://www.cplusplus.com/doc/tutorial/typecasting/
double tempa =
ここで、2 からの新しい double 値を、除算に使用できる一時的な値 tempa に割り当てます。
cplusplus.com のチュートリアルに従うのが少し難しい場合は、http: //www.cprogramming.com/tutorial/c++-tutorial.html で試してみると、少し読みやすくなります。