2017-04-11 20 views
0

我覺得我只是對這個項目的措辭感到困惑,但我在這裏發佈,以確保我有正確的類的基礎知識(就像我說的,我們剛開始學習它們)。介紹類(C++)項目希望我們創建兩個構造函數,但它們都不需要任何參數 - 我應該在這裏做什麼?

項目迅速的開始是如下:

聲明和定義一個名爲里程錶類。這門課將有兩個私人變量,一個是駕駛里程,另一個是加入汽油的加侖汽油。

成員函數應包括:

  • 一個構造函數的初始值兩者的私有變量。
  • 一個默認構造函數,它將兩個值都設置爲零。

隨着更多的成員函數對我的問題不重要。我完全理解默認構造函數,但另一個是我遇到的問題。如果他(我的教授)希望我們收集初始變量,那麼爲什麼它需要任何參數?我想我可以通過一個空字符串作爲參數,但我覺得我在這裏失去了一些東西...

爲了擴大這個項目的重點,萬一需要,我們正在創建一個程序,允許用戶不斷輸入(在菜單屏幕上)英里驅動或加侖投入他們的坦克。當用戶請求時,程序會找到mpg。很簡單。

這是程序的一部分,應該足以讓某人幫助我。第二個/非默認的構造函數看起來好像會起作用,但顯然我需要某種類型的參數。任何建議或幫助,不勝感激。

#include <iostream> 
using namespace std; 

class Odometer{ 
public: 
    Odometer(); // sets values to 0 
    Odometer(WHAT GOES HERE); // gathers initial values 
    void get_miles(); 
    void get_gallons(); 
    void add_in_trip_miles(); 
    void add_gas(); 

private: 
    double milesDriven;  // represents the miles the car has driven 
    double gallonsGas;  // represents the number of gallons pumped into car 

}; 


int main() { 
    Odometer userInfo; // creates object for the user-inputted values 

    bool quit = false; // true when user wants to quit 
    int userChoice; // for navigating the menu screen 
    while(!quit){ 
     cout << "To view total miles, enter 1. To view total gallons, enter 2.\nTo record more miles driven, enter 3. To record gallons pumped into the tank, enter 4.\n To view the average MPG, enter 5. To reset the odometer, enter 6.\n To quit the program, enter 7." << endl; 
     cin >> userChoice; 
     if(userChoice == 1) userInfo.get_miles(); // TODO: switch/case statement instead? 
     if(userChoice == 2) userInfo.get_gallons(); 
     if(userChoice == 3) userInfo.add_in_trip_miles(); // TODO: "function which increases the miles by the amount sent in its parameter 

    } 

    cout << "Have a nice day!" <<endl; 
    return 0; 
} 


Odometer::Odometer(){ // sets values to 0 (default) 
    milesDriven = 0; 
    gallonsGas = 0; 
} 

Odometer::Odometer(WHAT GOES HERE?){  // gathers initial values 
    cout << "Please enter an initial value for miles driven." << endl; 
    cin >> milesDriven; 
    cout << "Please enter an initial value for how many gallons were put into the car." << endl; 
    cin >> gallonsGas; 

} 
+0

什麼是不清楚*兩個私有變量的初始值的構造函數*?你有沒有做過構造函數採取參數? – NathanOliver

+0

我解釋了一個構造函數,它爲兩個私有變量取初始值。*表示它將兩個值作爲參數並用這些值初始化私有成員。自然要做的是將輸入移動到構造函數的外部,並將提供的值作爲參數提供。 –

+0

您可以通過了解[成員初始值設定項列表](http://en.cppreference.com/w/cpp/language/initializer_list)獲益。 –

回答

0

您的老師要求您使用參數實現第二個構造函數,以便用戶能夠以他想要的狀態初始化對象。我會這樣實現它:

Odometer(double milesDriven_, double gallonsGas_) : 
    milesDriven(milesDriven_), 
    gallonsGas(gallonsGas_) 
{} 
+0

我很抱歉,但這個構造函數的定義令我難以置信的困惑。當你正在做'英里駕駛(milesDriven_)'時,這到底做了什麼?參數後我也不理解冒號。如果你有時間解釋,我很渴望學習,但我認爲我們還沒有在課堂上得到這麼多。例如,我不能在主要部分:'cout <<「駕駛多少英里?」; cin << initialMilesDriven;'然後做同樣的加侖氣體,然後傳遞給第二個構造函數,它只是將這些初始值分配給私有成員變量? –

+0

冒號後面的東西是[初始值列表](http://en.cppreference.com/w/cpp/language/initializer_list)。你可以用這個東西爲你的類成員實例調用構造函數。它不會爲[POD](http://en.cppreference.com/w/cpp/concept/PODType)類型提供任何幫助,但它可以幫助您初始化一些沒有任何默認構造函數的成員(或者避免調用默認的構造函數)。 –

+0

是的,你可以像這樣使用它: int ReadValueWithInvite(const char * invitationText) { std :: cout << invitationText; int結果; std :: cin >> result; 返回結果; } INT主(){ 里程錶里程錶( ReadValueWithInvite( 「輸入英里從動: 」), ReadValueWithInvite(「 輸入加侖氣體:」)); } 對不起,在註釋中無法處理代碼格式 –

相關問題