程序退出没有输入,它有基础,驱动类属性初始化问题

时间:2017-07-18 02:01:08

标签: c++ inheritance input

它有两个问题 1)。程序没有输入它退出而没有获得变量选项的值。 2)。另外我的基类和派生类没有初始化,它们显示垃圾值。

这是完整的代码。

#include<iostream>
using namespace std;


class BeverageItem
{
 protected:
    string name;
    double price;


 public:
    void set_name(string n);
    string get_name();
    void set_price(double pr);
    double get_price();


};

void BeverageItem::set_name(string n)
{
   name=n;
}
string BeverageItem::get_name()
{
  return(name);
}

void BeverageItem::set_price(double pr)
{
   price=pr;
}
double BeverageItem::get_price()
{
   return(price);

}


class HotBeverage:public BeverageItem
{

private:
    int tea_bags;
    int whiteners;


public:
    //HotBeverage(int bg,int wht);
    void set_teabags(int t_bags);
    int get_teabags();
    int  getwhiteners();
    void  set_whiteners(int wht);
    double basePrice();

    double computeTax();
    double totalCost();
    void print();
};

double HotBeverage::computeTax()
{

    return (0.16*price);
}

double HotBeverage::totalCost()
{

    return(price+computeTax());
}

 double HotBeverage::basePrice()
 {
    double pr;

    if((tea_bags==1)&& (whiteners==1))
   {

        pr=20;

   }
   else if((tea_bags>1)&& (whiteners>1))
   {

    tea_bags=tea_bags-1;
    pr=20+(5*tea_bags);

   }
   set_price(pr);
   return(pr);

 }


  void HotBeverage::set_teabags(int t_bags)
  {

      tea_bags=t_bags;
  }

  int HotBeverage::get_teabags()
  {
    return(tea_bags);
  }
  int HotBeverage::HotBeverage::getwhiteners()
  {

      return(whiteners);
  }

  void  HotBeverage::set_whiteners(int wht)
  {
    whiteners=wht;
  }
   void HotBeverage::print()
 {
     cout<<"Name: "<<name<<endl;
     cout<<"Tax:"<<computeTax()<<endl;
     cout<<"Total Cost: "<<totalCost()<<endl;
 }





class ColdBeverage:public BeverageItem
{

  private:
      int drinkSize;


  public:
   //ColdBeverage(int drinkSize);
   void setDrinkSsize(int sz);
   int getDrinkSize();
    double basePrice();
    double computeTax();
    double totalCost();
    void print();

};

 void ColdBeverage::print()
 {
     cout<<"Name: "<<name<<endl;
     cout<<"Tax:"<<computeTax()<<endl;
     cout<<"Total Cost: "<<totalCost()<<endl;
 }

void ColdBeverage::setDrinkSsize(int sz)
{
    drinkSize=sz;
}
int ColdBeverage::getDrinkSize()
{
    return(drinkSize);
}

double ColdBeverage::computeTax()
{

    return (0.16*price);
}

double ColdBeverage::totalCost()
{

    return(price+computeTax());
}



double ColdBeverage::basePrice()
{
    double pr;
    double regularPr=30;
    switch(drinkSize)
    {
    case 1:  //regular,
         pr=regularPr;
        break;
    case 2:  //large.
         price=1.5*regularPr;
        break;
    case 3: //extra large.
         price=2*regularPr;
        break;

    }
    set_price(pr);
    return(pr);
}

int main()
{
    string name;
    int option;
    cout<<"Enter The Beverage Name=";
    cin>>name;




        cout<<"1. For Hot Beverage\n\n";
        cout<<"2. For Cold Beverage\n\n";
        cout<<"Select Your Choice(1,2)=";
        cin>>option;


        BeverageItem bi;
        bi.set_name(name);

        **//some other code here.**



    return 0;
}

2 个答案:

答案 0 :(得分:0)

1)我真的没有看到我试过的编译器有问题 http://cpp.sh/4p5mw

2)成员变量中的POD未默认初始化。 https://stackoverflow.com/a/15212447/4669663

答案 1 :(得分:0)

以下是问题

cin>>name;
当在字符串中输入空格时,

cin会停止,所以我必须使用

getline(cin,name);

第二个问题是因为我没有在basePrice()之前调用print() 谢谢大家