从相关类访问私有成员数据

时间:2012-06-23 20:33:16

标签: c++ inheritance

我正在尝试为我的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对象的动态数组。我能做到这一点。我的问题是'Register'中的RingUpSale()函数。我需要能够从该函数访问和修改“Sale”的私有成员数据。例如:

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对象的动态数组。这个 意味着大多数这些函数将使用这个数组来完成他们的工作 - 他们也可以 要求销售集体成员职能)。

2 个答案:

答案 0 :(得分:1)

制作getter和setter:

int getX() { return _x; } void setX(int x_) { _x = x_; } private: int _x; };

x是你想要的变量

答案 1 :(得分:0)

看起来Sale::MakeSale()函数旨在处理这些税务计算详细信息。给定项目和基本价格,它将计算税额(如有必要)并更新total值。

(我假设您虽然无法修改Sale.h,但可以实施Sale.cpp。)