我正在尝试为我的 OO 课程编写两个课程,Sale 和 Register。这是两个标题。
销售标头:
enum ItemType {BOOK, DVD, SOFTWARE, CREDIT};
class Sale
{
public:
Sale(); // default constructor,
// sets numerical member data to 0
void MakeSale(ItemType x, double amt);
ItemType Item(); // Returns the type of item in the sale
double Price(); // Returns the price of the sale
double Tax(); // Returns the amount of tax on the sale
double Total(); // Returns the total price of the sale
void Display(); // outputs sale info (described below)
private:
double price; // price of item or amount of credit
double tax; // amount of sales tax (does not apply to credit)
double total; // final price once tax is added in.
ItemType item; // transaction type
};
注册头:
class Register{
public:
Register(int ident, int amount);
~Register();
int GetID(){return identification;}
int GetAmount(){return amountMoney;}
void RingUpSale(ItemType item, int basePrice);
void ShowLast();
void ShowAll();
void Cancel();
int SalesTax(int n);
private:
int identification;
int amountMoney;
int listSize;
int numSales;
Sale* sale;
};
在 Register 类中,我需要保存 Sale 对象的动态数组。我能够做到这一点。我的问题是“注册”中的 RingUpSale() 函数。我需要能够从该功能访问和修改“销售”的私有成员数据。例如:
sale[numSales]->item = item;
sale[numSales]->total = basePrice; // Gets an error
if(item == CREDIT){
sale[numSales]->tax = 0; // Gets an error
sale[numSales]->total = basePrice; // Gets an error
amountMoney -= basePrice;
}
else {
sale[numSales]->tax = 0.07*basePrice; // Gets an error
sale[numSales]->total = (0.07*basePrice)+basePrice; // Gets an error
amountMoney += basePrice;
}
我不知道如何使这种访问成为可能。也许通过继承或朋友结构?
在你对这个设计大发雷霆之前,请记住这是为了家庭作业,所以有一些愚蠢的限制。其中之一是我无法修改我所写的“Sale.h”。而且我只能在“Register.h”中添加更多私有函数。
RingUpSale() 函数说明:
- RingUpSale 此函数允许将销售的商品类型和基本价格作为参数传入。这个函数应该将销售存储在销售列表中,并且应该适当地更新收银机中的金额。购买的物品会在收银机上加钱。请记住,销售税必须添加到任何已售商品的基本价格中。如果销售类型是 CREDIT,那么您应该从登记册中扣除金额。
还有这个:
-(提示:请记住,在寄存器内部,您保留了一个 Sale 对象的动态数组。这意味着这些函数中的大多数将使用这个数组来完成它们的工作——它们还可以调用 Sale 类的成员函数)。