2017-04-05 13 views
0

enter image description here変数はクラス間で渡されませんか?私のループは構造化されていますか?

上記の出力に見えるようにするには、次のコードが必要ですが、このようにするのは苦労しています。何らかの理由で、私はレート変数が人口になっていないと思うし、なぜ私は分からない。また、私はボーナスを計算して適切に表示するのに苦労しています。

#include <iostream> 
#include <iostream> 
#include <iomanip> 
#include "Chap1227.h" 

using namespace std; 

//function prototypes 
double getBonusRate(double rate); 
void columnsDashes(); 
void endPgm(); 


int main() { 

    double rate = 0.0; 

     //filling array 
     int salesArray[10][4] = {{2400, 3500, 2000, 2750}, 
           {1500, 7000, 1000, 2225}, 
           {2600, 2450, 2100, 2999}, 
           {2790, 2240, 2500, 2885}, 
           {2100, 2600, 2300, 3000}, 
           {6300, 7000, 8000, 5550}, 
           {3300, 1850, 2950, 2100}, 
           {2700, 5500, 6000, 7200}, 
           {4700, 4800, 4900, 5100}, 
           {2375, 3300, 2550, 1925}}; 

     getBonusRate(rate); 

     columnsDashes(); 

     //bonus object 
     Bonus myBonus; 

     myBonus.calcAndDisplay(salesArray, rate); 

     endPgm(); 


    return 0; 
} 

// ***** getBonusRate function description ***** 
// 
double getBonusRate(double rate) 
{ 
    //display console title to user 
    cout << "JM SALES BONUS CALCULATOR\n\n"; 

    //get bonus rate from user 
    cout << "Enter bonus rate in decimal form: "; 
    cin >> rate; 
    cout << "\n\n"; 

    return rate; 
} 

// ***** columnsDashes function description ***** 
// 
void columnsDashes() 
{ 
    //display column headings and dashes to user 
    cout << "Number  Sales($)  Bonus($)\n"; 
    cout << "------  --------  --------\n"; 



} 

// ***** endPgm function description ***** 
// 
void endPgm() 
{ 
    //EOP message 
    cout << "\n\nEnd of Program."; 
} 

上記は、CPPであり、以下に.hファイル

実際
#ifndef CHAP1227_H_ 
#define CHAP1227_H_ 

#include <iostream> 
#include <fstream> 
#include <iomanip> 

using namespace std; 

// ***** CLASS DEFINITION ***** 
class Bonus 
{ 
    public: 
     Bonus(); 
     void calcAndDisplay(int salesArray[10][4], double rate); 

    private: 
     int totSales; 
     int grandTotSales; 
     double salesBonus; 
     double bonusGrandTot; 
}; 

// ***** CLASS IMPLEMENTATION ***** 
//default constructor 
Bonus::Bonus() 
{ 
    totSales = 0; 
    grandTotSales = 0; 
    salesBonus = 0.0; 
    bonusGrandTot = 0.0; 
} 

//calcAndDisplay function 
// 
void Bonus::calcAndDisplay(int salesArray[10][4], double rate) 
{ 

    for (int row = 0; row < 10; row += 1) 
     { 
      cout << row << "  "; 
      for (int column = 0; column < 4; column += 1) 
      { 
       totSales += salesArray[row][column]; 

       salesBonus = totSales * rate; 
       bonusGrandTot += salesBonus; 

      } 
      cout << totSales << "\n"; 
      grandTotSales += totSales; 
      totSales = 0; 

     } 
    cout << setprecision(2); 
    cout << salesBonus; 
    cout << grandTotSales << " " << bonusGrandTot; 
} 


#endif /* CHAP1227_H_ */ 
+0

参照値渡し、バイ参照渡し、結果として戻り引数を取得する方法機能。 – LutzL

答えて

0

こっちの問題は、あなたの代わりに「参照による呼び出し」の「値による呼び出し」によって「率」変数を渡しているということです。それはあなたがrefrenceしてレートの変数を渡していることを示している「&」記号を覚えておいてください

double getBonusRate(double& rate) 
{ 
    //display console title to user 
    cout << "JM SALES BONUS CALCULATOR\n\n"; 

    //get bonus rate from user 
    cout << "Enter bonus rate in decimal form: "; 
    cin >> rate; 
    cout << "\n\n"; 

    return rate; 
} 

、あなただけの次にあなたのgetBonusRate機能を再定義する必要があり、それを動作させるために 。値によってコールの詳細については

と、次の確認してください参照して呼び出し、

https://www.tutorialspoint.com/cplusplus/cpp_function_call_by_value.htm https://www.tutorialspoint.com/cplusplus/cpp_function_call_by_reference.htm

0

であるあなたは、「率」と呼ばれる複数の変数を持っているbecasuse、「速度」は、移入されていません。ボブ・スミス、ボブ・トムソン、ボブ・トムソン、

、、、

getBonusRate()は、「レート」という独自のコピーを取得し、「getBonusRate :: rate」となります。 main関数はそれ自身の "main :: rate"のコピーを持っています。コンパイラはこの完全な名前を認識しますが、コードでは短い名前の "rate"しか表示されません。

あなたの関数getBonusRate()は引数の型、および戻り値の型を持っています。 ドアとアウトドアです。あなたはレートを渡しますが、それは出ません。修正するには

、あなたのような何かを言う必要があると思います:inRateは、それがことだしgetBonusRate()関数の中にコピーされます

outRate = getBonusRate(inRate); 

、それが戻ってそれを返し、あなたがに値を割り当てますoutRate。変数を再利用/上書きすることもできますので、これも可能です: inRate = getBonusRate(inRate);

+0

または、あなたが提案したものを行うこともできます。彼はおそらくより多くの業界標準のアプローチ(若干速いパフォーマンス)です。鉱山は、教科書の説明である(それは型を返す説明し、スコープの概念を示唆します)。 – NapkinTrout

関連する問題