2017-04-16 69 views
-3

我们刚开始学习这个介绍C++ CS类的课程。为了回答我的问题,我提供了很多提示,以防万一,但我粗略地列出了我有特定问题的几行。关于教授关于课程和课程参数的说明非常困惑 - 介绍C++课程

声明并定义一个名为Odometer的类。本课程将有两个 私有变量,一个用于驱动里程,另一个用于加入汽车的 加仑汽油。我们将假设 汽车以满罐开始,但这些值在默认构造函数 中从零开始。成员函数应该包括:

•一个构造函数,它为两个私有变量 提供初始值。

•默认构造函数,将两个值都设置为零。

•一个get_miles功能

•一个get_gallons功能

的add_in_trip_miles功能,由记录多少在它的参数发送

的add_gas函数量增加英里汽油被泵入 的坦克。

•一个mpg函数,返回每加仑英里数 ,以计算驾驶里程数和加入储罐的气体总量。

•重置功能,将英里和加仑重置为零。

在您的程序顶部写下类声明,在底部写入函数定义 。在中间写一个主其 声明里程表对象,然后为用户提供了一个菜单呐循环 让他们选择了

  1. 见总里程
  2. 见总加仑
  3. 记录多英里驱动
  4. 泵入罐记录加仑
  5. 见的平均MPG,这辆车已经得到了 - 这是基于驱动英里,加仑总数累计数泵 进入水箱自里程表被LAT复位,或对象创建
  6. 重置里程表
  7. 退出程序

所以这两个功能粗体基本上做同样的事情,一个增加了多少英里已经驱动,其他用户输入的数值会增加进入储罐的气体数量。那么,我对教授的问题是,为什么里程函数需要将数据发送到参数中,而加仑函数却没有?他们本质上是一样的,所以我很困惑他们为什么不应该既传递一个参数,也不传递一个参数。下面是我的代码这两个函数:

void Odometer::add_in_trip_miles(){ 
    double milesToAdd; 
    cout << "How many miles would you like to add to the total?" << endl; 
    cin >> milesToAdd; 
    milesDriven += milesToAdd; 
} 

void Odometer::add_gas(){ 
    double gallonsToAdd; 
    cout << "How many gallons would you like to add to the total?" << endl; 
    cin >> gallonsToAdd; 
    gallonsGas += gallonsToAdd;  
} 

目前第一个不符合项目的提示,因为它不传递参数的值,它只是使用COUT/CIN的功能本身来获得增加的总价值。我想我可以通过将cout/cin放入int main()并将该值传递给add_in_trip_miles函数来满足提示。

我给他发邮件有关的困惑,并得到如下回应,这让我更糊涂了:

有输入/输出功能,您可以通过键盘/输入文件 信息之间的差异或将信息输出到 屏幕/输出文件以及设置的功能。如果我们程序员想要自己进行用户交互,可以使用 设置的功能,如果他们从其他地方将 的信息放入对象中,则可以使用 - 可能是计算的值。我希望您 会实现这两者,这是我们通常在编写 类时所做的,以便为应用程序员提供选项。

他只是要求更多的功能,只有输入/输出功能,即再通过这些输入功能为add_in_trip_milesadd_gas?这封电子邮件让我更加困惑,因为他提到了(在上面的项目提示中)所需的每个成员函数,而且它们都不是输入函数。

这里的任何指导都会很棒,我的代码目前完全符合他的要求,但我不希望因为没有以某种方式使用函数而受到处罚,等等。让我知道你们认为并感谢您的帮助!

+3

如果你不明白的练习中,您可能要问*教授*澄清问题。 –

+0

@BoPersson他们做了,甚至更加困惑的回应 –

+0

@ M.M正确 - 开始认为我不应该甚至发邮件给他,因为我现在更加困惑,哈哈。 –

回答

-1
void Odometer::add_in_trip_miles(double milesToAdd){ 
milesDriven += milesToAdd; //assuming milesDriven is the private variable in your class! 
} 

void Odometer::add_gas(double gallonsToAdd){ 
gallonsGas += gallonsToAdd; //assuming gallonsGas is the private variable in your class!  
} 

所以,如果我做了这样的事情

//Class up here 
int main() 
{ 
    Odometer myOdometer;//default constructor both values are 0. 

    myOdometer.add_gas(5);// adds 5 to gallons of gas 
    myOdometer.add_in_trip_miles(55);//adds 55 to miles driven 

    //so if i did 
    std::cout<<"Miles: "<<myOdometer.get_miles()<<std::endl; 
    std::cout<<"Gallons: "<<myOdometer.get_gallons()<<std::endl; 
    //should display: 
    // Miles: 5 
    // Gallons: 55 
    } 

//Class functions down here 

也许你的教授要你做这样的事情

// Something like this perhaps, missing 5,6 
int main() 
{ 
    Odometer myOdometer;//default constructor both values are 0. 
    int caseInt = 0; 
    char enterKey; 
    cout<<endl<<"1. See total miles"; 
    cout<<endl<<"2. See total gallons"; 
    cout<<endl<<"3. Record more miles driven"; 
    cout<<endl<<"4. Record gallons pumped into the tank"; 
    cout<<endl<<"5. See avg mpg"; 
    cout<<endl<<"6. Reset the odometer"; 
    cout<<endl<<"7. Quit the program"<<endl; 
    cin>>caseInt; 
while(caseInt != 7) 
{ 
    switch(caseInt) 
    { 

    case 1: 
     cout<<endl<<"Total Miles: "<<myOdometer.get_miles()<<endl; 
     break; 
    case 2: 
     cout<<endl<<"Total Gallons: "<<myOdometer.get_gallons()<<endl; 
     break; 
    case 3: 
     double moremilesdriven; 
     cout<<"Enter the more miles driven: "; 
     cin>>moremilesdriven; 
     myOdometer.add_in_trip_miles(moremilesdriven); 
     cout<<endl; 
     break; 
    case 4: 
     double moreGallons; 
     cout<<"Enter how many more gallons pumped into the tank: "; 
     cin>>moreGallons; 
     cout<<endl; 
     myOdometer.add_gas(moreGallons); 
     break; 
    case 5: 
     break; 
    case 6: 
     break; 
    case 7: 
     break; 
    default: 
     cout<<"Must be [1-7], Please try again *How 'bout them Hawkeyes*"<<endl; 
     break; 
    } 
    cout<<endl<<"1. See total miles"; 
    cout<<endl<<"2. See total gallons"; 
    cout<<endl<<"3. Record more miles driven"; 
    cout<<endl<<"4. Record gallons pumped into the tank"; 
    cout<<endl<<"5. See avg mpg"; 
    cout<<endl<<"6. Reset the odometer"; 
    cout<<endl<<"7. Quit the program"<<endl; 
    cin>>caseInt; 

} 

return 0; 
} 

而且模块化,*发现它是不是你的类功能但是你可以直接使用这个函数而不用直接使用这个类,所以你可以使用这个函数调用你的add,因为它返回一个双精度值

double get_miles() 
{ 
    double moremilesdriven; 
    cout<<"Enter the more miles driven: "; 
    cin>>moremilesdriven; 
    cout<<endl; 
    return moremilesdriven; 
} 

现在case语句:

 case 3: 
     myOdometer.add_in_trip_miles(get_miles()); 
     break; 
+0

这真的帮了我很多。谢谢你的时间,现在有很大的意义 –

+0

Np,似乎他可能想要的东西,你实际上调用输入的函数,以及进一步模块化 – DanielAaron

+0

现在我正在执行switch语句(我有一个如果/如果先前存在混乱)和'cout <<“输入多少英里被驱动:”;'在案件完成后才会出现。我通过调试器一行一行地运行它,它对我来说没有多大意义。以下是完整的案例:案例3: cout <<“输入多少英里被驱动:”; cin >> milesToAdd; userInfo.add_in_trip_miles(milesToAdd); cout << endl; break;'和cout在函数调用之后才会出现。 –