-
Display problem
The program will run but does not display right. Perhaps I did not initialize something...but I can not find it and have been looking over it for awhile. Can anyone help and let me know what it is I am missing.
Code:
#include<iostream.h>
#include<conio.h>
#include<string.h>
class Meal
{
friend ostream& operator<<(ostream &out, const Meal &aMeal);
friend istream& operator>>(istream &in, Meal &aMeal);
private:
char entree[20];
int calorie;
public:
Meal(char ent[], int cal = 25);
Meal();
Meal operator+(Meal &aMeal);
void displayMeal();
};
Meal::Meal(char ent[], int cal )
{
strcpy(entree, ent);
calorie = cal;
};
Meal::Meal()
{
calorie = 150;
};
Meal Meal::operator+(Meal &aMeal)
{
Meal exam;
exam.calorie = calorie + aMeal.calorie;
return(exam);
};
void Meal::displayMeal()
{
cout<<"The entree: "<<entree<<"has"<<calorie<< " calories."<<endl;
};
ostream& operator<<(ostream &out, const Meal &aMeal)
{
out<<aMeal.entree<<aMeal.calorie<<" calories "<<endl;
return(out);
};
istream& operator>>(istream &in, Meal &aMeal)
{
cout<<endl; //clears
cout<<"Enter the entree name: ";
in>>aMeal.entree;
cout<<"Enter the amount of calories: ";
in>>aMeal.calorie;
return(in);
};
void main()
{
Meal breakfast("Bagel ", 100);
Meal lunch("Hamburger ", 325);
Meal dinner("Steak ", 350);
Meal total(" ", 0);
total = breakfast + lunch + dinner;
cout<<"Breakfast: "<<breakfast<<endl;
cout<<"Lunch: "<<lunch<<endl;
cout<<"Dinner: "<<dinner<<endl;
cout<<"Daily Total: "<<total<<endl;
getch();
};
Thanks for any help!
-
Code:
#include<iostream.h>
#include<conio.h>
#include<string.h>
class Meal
{
friend ostream& operator<<(ostream &out, const Meal &aMeal); // these 2 funcs better done as not friends but ok as is
friend istream& operator>>(istream &in, Meal &aMeal);
private:
char entree[20];
int calorie;
public:
Meal(char ent[], int cal = 25);
Meal();
Meal operator+(Meal &aMeal); // nonmember better
void displayMeal();
};
Meal::Meal(char ent[], int cal )
{
strcpy(entree, ent); // first real error. use strncpy() to stop buffer overrun
calorie = cal;
};
Meal::Meal()
{
calorie = 150;
};
Meal Meal:perator+(Meal &aMeal)
{
Meal exam; // calls default con. I think u meant Meal exam(*this);
exam.calorie = calorie + aMeal.calorie;
return(exam);
};
void Meal::displayMeal()
{
cout<<"The entree: "<<entree<<"has"<<calorie<< " calories."<<endl;
};
ostream& operator<<(ostream &out, const Meal &aMeal)
{
out<<aMeal.entree<<aMeal.calorie<<" calories "<<endl;// needs spaces
return(out);
};
istream& operator>>(istream &in, Meal &aMeal)
{
cout<<endl; //clears
cout<<"Enter the entree name: ";
in>>aMeal.entree; // do not do this
cout<<"Enter the amount of calories: ";
in>>aMeal.calorie; // so-so
return(in);
};
void main() // main returns an int ALWAYS
{
Meal breakfast("Bagel ", 100);
Meal lunch("Hamburger ", 325);
Meal dinner("Steak ", 350);
Meal total(" ", 0);
total = breakfast + lunch + dinner;
cout<<"Breakfast: "<<breakfast<<endl;
cout<<"Lunch: "<<lunch<<endl;
cout<<"Dinner: "<<dinner<<endl;
cout<<"Daily Total: "<<total<<endl;
getch();
};
otherwise ok
-
The fields for Meal did need to be set with arguements or uses default values when no arguements are provided. I have changed public to:
Code:
public:
Meal(char ent[] = "Pizza ", int cal = 25);
Meal operator+(Meal &aMeal);
void displayMeal();
Then I changed main to:
Code:
{
Meal breakfast("Bagel ", 100);
Meal lunch("Hamburger ", 325);
Meal dinner("Steak ", 350);
Meal total("Daily Total: ", 0);
total = breakfast + lunch + dinner;
cout<<"Breakfast: "<<breakfast<<endl;
cout<<"Lunch: "<<lunch<<endl;
cout<<"Dinner: "<<dinner<<endl;
cout<<total<<endl;
getch();
};
But I want "Daily Total: " to show up and instead is displays "Pizza". How can I fix that?