2012-06-23 3 views
1

Я пытаюсь написать два класса: «Продажа и регистрация» для моего класса OO. Вот два заголовка.Доступ к данным частного участника из родственного класса

Продажа заголовок:

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; 
}; 

В классе регистра мне нужно держать динамический массив объектов продажи. Я могу это сделать. Моя проблема связана с функцией RingUpSale() в «Register». Мне нужно иметь возможность доступа и изменения данных частного участника «Продажи» от этой функции. Например:

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 Эта функция позволяет тип элемента и базовая цена продажи будет принят в качестве параметров. Эта функция должна хранить продажу в списке продаж, и она должна соответствующим образом обновить сумму в кассе . Товары, которые будут куплены, добавят деньги в реестр. Помните, что налог с продаж должен быть добавлен к базовой цене проданного предмета. Если тип продажи - КРЕДИТ, то вы должны вычесть сумму из регистра.

Кроме этого:

- (Подсказка: имейте в виду, что в реестре, вы оставляете динамический массив Продажа объектов Это означает, что большинство из этих функций будет использовать этот массив, чтобы сделать. их работа - и они могут также вызвать функции класса класса продажи).

+0

Если вы не разрешается изменять код класса 'Sale', то это будет невозможно. –

ответ

0

Похоже, что функция Sale::MakeSale() призвана заботиться об этих деталях расчета налогов. Учитывая предмет и базовую цену, он будет вычислять налог (при необходимости) и обновлять значение total.

(я предполагаю, что, хотя вы не можете изменить Sale.h, вы можете реализовать Sale.cpp.)

+0

Итак, вы говорите, что используете функцию MakeSale() в функции RingUpSale()? –

+0

Я пытаюсь сделать это, но я не могу получить доступ к функции MakeSale() из Register.cpp. Могу ли я использовать наследование, чтобы оба класса делились всем? –

+0

Нет. Наследование здесь не уместно, потому что 'Продажа' не является своего рода« Регистром », а« Регистрация »- это не« распродажа »(я чувствую, что мы это делали раньше). Вместо. в 'Register :: RingUpSale()', создайте новый объект 'Sale', а затем вызовите' sale.MakeSale (item, price); '. –

1

замыкающих методы получения и установки:

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

были х переменная вы хотите

+0

Мне не разрешено добавлять публичные функции. –

+1

@ConnorBlack, Не разрешено использовать геттеры и сеттеры? Это на самом деле очень странно. – chris

+0

, тогда вы не можете этого сделать, я боюсь, это классный дизайн, который вам нужно взять? –

Смежные вопросы