У меня задача: создать меню, в которое можно добавлять различные блюда. Обеспечить произвольную размерность структуры за счет использования в объекте динамических структур данных. Реализовать вывод меню в файл, чтение из файла.
Создаю класс dish с полями Название, Цена и Тип. Название блюда задаю как указатель на char. Потом создаю класс menu, у него одно из полей - объект класса dish. В конструкторе класса menu создаю массив объектов dish d[num], вводя данные с клавиатуры.
Проблема: при вводе с клавиатуры Название блюда сохраняется только последнее введенное, и у всех предыдущих d название заменяется на последнее введенное. (Цена и тип сохраняются для каждого d успешно) - это я вижу при отладке.
Подскажите плиз в чем может быть проблема. (ВСЕ ВРЕМЯ ПУТАЮСЬ С УКАЗАТЕЛЯМИ НА СТРОКИ).
Всем заранее ОЧЕНЬ благодарен
Код: Выделить всё
class dish
{
private:
char *name;
double price;
dish_typ type;
public:
dish();
dish(char * name, double price, dish_typ type);
void set(char * name, double price, dish_typ type);
};
class menu
{
private:
dish d;
fstream f;
public:
menu();
};
dish::dish()
{
name="";
price=0.00;
type=cold;
}
dish::dish(char * name, double price, dish_typ type)
{
this->name=name;
this->price=price;
this->type=type;
}
void dish::set(char * name, double price, dish_typ type)
{
this->name=name;
this->price=price;
this->type=type;
}
void dish::dish_prn()
{
setlocale(LC_ALL,"Russian");
char* s;
if (type==cold)
s="cold";
if (type==hot)
s="hot";
if (type==sweet)
s="sweet";
cout<<"------------\nНазвание блюда Тип Цена\n";
cout<<name<<" "<<s<<" $"<<price<<endl;
}
menu::menu()
{
setlocale(LC_ALL, "Russian");
char name[25];
double price;
int type;
short num;
f.open("menu2.txt", ios_base: :o ut|ios_base::trunc|ios_base::binary);
//использую бинарный файл
cout<<"How many dishes do you want in the menu?\n";
cin>>num;
cin.get();
//dish * d=new dish[num];
dish d[10];
dish k;
for (int i=0; i<num; i++)
{
cout<<"Введите название блюда, его цену и тип (горячее/холодное/десерт)\n";
cin.getline(name, 30);
(cin>>price).get();
(cin>>type).get();
d[i].set(name, price, (dish_typ)type);
f.write((char*)&d[i], sizeof d[i]);
}
f.close();
f.open("menu2.txt", ios_base::in|ios_base::binary);
f.seekg(sizeof d[0] );
f.read( (char*)&k, sizeof d[1] );
k.dish_prn();
f.close();
}
void main()
{
menu m;
}