我有下一个程序,我有4个类: Cake,PiesandSaltyPastries,IceCreamandDesserts以及所有这些类的基类: CBakery。 我需要创建一个包含继承自CBakery的类的数组,例如我尝试过:
CBakery *bought[6]; //Bought food
Cake cake;
cake.InputCake(); //To fill it with input
bought[1] = new Cake;
bought[1] = cake;
但它不起作用,这里是完整的代码,如果你能帮助我,我会非常感激。
编辑:
#include "stdafx.h"
#include <iostream>
using namespace std;
class CBakery
{
public:
virtual void f(void);
virtual void Input()
{
int freeze;
cout << "Enter Product Name, Type, Price, if it is freezable(y-1 n-2), and expiration time in days\n";
cin >> ProductName >> ProductType;
cin >> ProductPrice;
cin >> freeze;
if(freeze == 1)
freezable = true;
else
freezable = false;
cin >> ExpirationTime;
}
virtual void Show(void){
cout << "Product's Name: " << ProductName;
cout << "Product's Type: " << ProductType << "\nProduct's Price: " << ProductPrice << "\nIs Freezable? :";
if(freezable)
cout << "Yes\n";
else
cout << "Not\n";
cout << "Expiration time (In days): " << ExpirationTime << endl;
}
private:
char *ProductName;
char ProductType; //1-Salty Pastry. 2-Sweet pastry. 3-Non baked dessert.
float ProductPrice; // To the customer
bool freezable;
int ExpirationTime; //In days
};
class Cake : public CBakery
{
public:
void Input()
{
CBakery::Input();
int cream;
cout << "Does it have cream?\n (1-y, 2-n)\n";
cin >> cream;
if(cream = 1)
Cream = true;
else
Cream = false;
cout << "What is the diameter?(22cm - 24cm - 26cm.....)\n What is the ammount of days to reserve the cake\n";
cin >> Diameter >> daysToReserve;
}
void showCake()
{
CBakery::Show();
cout << "Does it have Cream?\n";
if (Cream)
cout << "Yes\n";
else
cout << "No\n";
printf("The Diameter is: %s \n Days needed to reserve the cake are: %s\n", Diameter, daysToReserve);
}
private:
bool Cream;
char *Diameter; //( 22 cm, 24 cm, 26 cm) Not square cakes.
char *daysToReserve;
};
class PiesandSaltyPastries : public CBakery
{
public:
void Input()
{
CBakery::Input();
int weight, paste;
cout << "Sold based on weight? (y = 1, n = 2), Contains paste (y = 1, n = 2)?\n";
cin >> weight >> paste;
if(weight = 1)
soldBasedonWeight = true;
else
soldBasedonWeight = false;
if(paste = 1)
containsPaste = true;
else
containsPaste = false;
}
void showSalty()
{
CBakery::Show();
cout << "Is it sold based on weight or unities?\n";
if(soldBasedonWeight)
cout << "Based on weight\n";
else
cout << "Based on unities\n";
}
private:
bool soldBasedonWeight; //Weight = true, unity = false.
bool containsPaste;
};
class IceCreamandDesserts : public CBakery
{
public:
void Input()
{
int natural, milk;
CBakery::Input();
cout << "How many calories per unity, is it natural(Y = 1, N = 2) ingredients only?, does it contain milk(Y = 1, N = 2)?\n";
cin >> caloriesPerUnity;
cin >> natural >> milk;
if(natural = 1)
naturalIngredientsOnly = true;
else
naturalIngredientsOnly = false;
if(milk = 1)
containsMilk = true;
else
containsMilk = false;
}
void showDesserts()
{
CBakery::Show();
printf("Calories per unity: %s\n", caloriesPerUnity);
cout << "Does it have natural ingredients only? \n";
if(naturalIngredientsOnly)
cout << "Yes";
else
cout << "No";
cout << "Does it contain milk? \n";
if(containsMilk)
cout << "Yes";
else
cout << "No";
}
private:
char *caloriesPerUnity;
bool naturalIngredientsOnly;
bool containsMilk;
};
void main()
{
CBakery *bought[6];
char category;
for (int i = 0; i < 6; i++)
{
cout << "Is it a cake(1), pies or salty pastry(2), or Ice cream and desserts?(3)\n";
cin >> category;
switch(category)
{
case 1:
Cake * cake = new Cake;
cake -> Input();
bought[i] = cake;
break;
}
}
}
答案 0 :(得分:2)
由于你没有陈述对你的节目不起作用的东西,我随机挑选一件并显示一个可能的错误:
Cake cake;
cake.InputCake();
bought[i] = new Cake;
这段代码将创建一个名为Cake
的本地cake
对象,将在其上调用InputCake
方法,然后插入一个完全不同的,新的,动态分配的对象在Cake
中输入bought[i]
。
请改为尝试:
case 1:
{
Cake * cake = new Cake;
cake->Input();
bought[i] = cake;
break;
}
实际初始化并插入同一个对象。