Toegang tot privélidgegevens van gerelateerde klasse

Ik probeer twee klassen te schrijven, Sale en Register, voor mijn OO-klas. Dit zijn de twee headers.

Verkoopkop:

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

Registreer header:

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

In de klasse Register moet ik een dynamische array van Sale-objecten bevatten. Ik kan dit doen. Mijn probleem is met de functie RingUpSale() in 'Registreren'. Ik moet in staat zijn om toegang te krijgen tot de gegevens van de privé-leden van 'Sale' en deze te wijzigen vanuit die functie. Bijvoorbeeld:

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

Ik weet niet hoe ik deze toegang mogelijk moet maken. Misschien door overerving of vriendenstructuur?

En houd rekening met het ontwerp voordat je begint met het maken van huiswerk, dus er zijn idiote beperkingen. Een daarvan is dat ik de 'Sale.h' niet kan aanpassen aan wat ik heb geschreven. En ik kan alleen meer privé-functies toevoegen in de 'Register.h'.

Functiebeschrijving RingUpSale ():

  • RingUpSale Met deze functie kunnen het artikeltype en de basisprijs van een verkoop worden doorgegeven als parameters. Deze functie zou de verkoop in de verkooplijst moeten opslaan, en het zou de hoeveelheid geld in de kassa correct. Items die worden gekocht, voegen geld toe aan het register. Onthoudt dat omzetbelasting moet worden toegevoegd aan de basisprijs van een verkocht item. Als het verkooptype CREDIT is, dan jij moet het bedrag van het register aftrekken.

Dit ook:

- (Tip: houd er rekening mee dat u binnen het register een dynamische reeks Sale-objecten behoudt betekent dat de meeste van deze functies deze array zullen gebruiken om hun werk te doen - en dat kunnen ze ook een beroep doen op de leden van de Sale-klas).

1
Als u de code van de categorie Verkoop niet mag wijzigen, is dit niet mogelijk.
toegevoegd de auteur Oliver Charlesworth, de bron

2 antwoord

maak van getters en setters:

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

waren x is je variabele die je wilt

1
toegevoegd
Ik mag niet meer openbare functies toevoegen.
toegevoegd de auteur Connor Black, de bron
@ Arno, je kunt het duidelijk doen. En ja, hij specificeerde precies welke functies we moesten schrijven.
toegevoegd de auteur Connor Black, de bron
Ik plaats de functiebeschrijving MakeSale ().
toegevoegd de auteur Connor Black, de bron
@ConnorBlack, mag u geen getters en setters gebruiken? Dat is eigenlijk heel raar.
toegevoegd de auteur chris, de bron
@ConnorBlack: Nee, dat kan niet. Ik vermoed dat je de beperkingen of het probleem dat moet worden opgelost verkeerd hebt geïnterpreteerd.
toegevoegd de auteur Oliver Charlesworth, de bron
dan kun je het niet doen ik ben bang, is dit het lesontwerp dat je moest nemen?
toegevoegd de auteur user1103589, de bron

Het lijkt erop dat de functie Verkoop :: MakeSale() bedoeld is om deze details voor de belastingberekening te regelen. Gegeven een artikel en een basisprijs, zou het de belasting berekenen (indien nodig) en de waarde totaal bijwerken.

(Ik neem aan dat, hoewel je Sale.h niet kunt wijzigen, je Sale.cpp kunt implementeren.)

0
toegevoegd
Dus u zegt dat gebruik de functie MakeSale() in de functie RingUpSale ()?
toegevoegd de auteur Connor Black, de bron
Ik probeer dit te doen, maar ik heb geen toegang tot de functie MakeSale() vanuit Register.cpp. Kan ik overerving niet gebruiken om beide klassen alles te laten delen ??
toegevoegd de auteur Connor Black, de bron
Ik heb overerving geïmplementeerd en al mijn fouten zijn verdwenen. Ik kan de privélidgegevens van Sale nu openen vanuit mijn register .cpp
toegevoegd de auteur Connor Black, de bron
Ik zit zo vast aan erfenis alleen omdat de week voorafgaand aan deze opdracht allemaal werd besteed aan het onderwerp overerving
toegevoegd de auteur Connor Black, de bron
Overerving werkte niet. Ik heb gedaan wat je zei, de openbare functies van de verkoop geïmplementeerd waar nodig en ik heb het voor elkaar gekregen om te compileren. Bedankt
toegevoegd de auteur Connor Black, de bron
Nee. Overname is hier niet geschikt, omdat Verkoop geen soort Register is en Register geen soort Verkoop (ik heb het gevoel dat we dit eerder hebben meegemaakt). In plaats daarvan. in Registreren :: RingUpSale() , maak een nieuw Verkoop -object en bel vervolgens sale.MakeSale (item, prijs); .
toegevoegd de auteur Greg Hewgill, de bron
Ok, natuurlijk, als je niet wilt luisteren, is dat prima.
toegevoegd de auteur Greg Hewgill, de bron