简体   繁体   中英

How to pass a private member variable to another class?

Based on my Snack.cpp, Snack header file, MiniVend header file & miniVend.cpp file, I am trying to move my Snack private member - price into my MiniVend.cpp file to generate the amount * price to return a total value of items in my machine. How do I access the price from another class?

Portion of my miniVend.cpp file

   double miniVend::valueOfSnacks()
    {

        return //// I don't know how to get snacks price in here? I need to access snacks & getSnackPrice. 

    }

miniVend header

   #ifndef MINIVEND
    #define MINIVEND
    #include <string>
    #include "VendSlot.h"
    #include "Snack.h"
    using std::string;

    class miniVend
    {
    public:
        miniVend(VendSlot, VendSlot, VendSlot, VendSlot, double); //constructor
        int numEmptySlots();
        double valueOfSnacks();
        //void buySnack(int);
        double getMoney();
        ~miniVend(); //desructor


    private:
        VendSlot vendslot1; //declare all the vending slots.
        VendSlot vendslot2; //declare all the vending slots.
        VendSlot vendslot3; //declare all the vending slots.
        VendSlot vendslot4; //declare all the vending slots.
        double moneyInMachine; //money in the machine

    };
    #endif // !MINIVEND

Snack.cpp

    #include "Snack.h"
    #include <iostream>
    #include <string>

    using std::endl;
    using std::string;
    using std::cout;
    using std::cin;

    Snack::Snack() //default constructor
    {
        nameOfSnack = "bottled water";
        snackPrice = 1.75;
        numOfCalories = 0;
    }

    Snack::Snack(string name, double price, int cals)
    {
        nameOfSnack = name;
        snackPrice = price;
        numOfCalories = cals;

    }

    Snack::~Snack()
    {

    }

    string Snack::getNameOfSnack()
    {
        return nameOfSnack;
    }

    double Snack::getSnackPrice()
    {
        return snackPrice;
    }

    int Snack::getNumOfCalories()
    {
        return numOfCalories;
    }

Snack.h file 
#ifndef SNACK_CPP
#define SNACK_CPP
#include <string>
using std::string;

class Snack
{
private:
    string nameOfSnack;
    double snackPrice;
    int numOfCalories;

public:
    Snack(); //default constructor
    Snack(string name, double price, int cals); //overload constructor
    ~Snack(); //destructor

              //Accessor functions

    string getNameOfSnack(); //returns name of snack
    double getSnackPrice(); //returns the price of the snack
    int getNumOfCalories(); //returns number of calories of snack
};



#endif // !SNACK_CPP

假设getSnackPrice()是公共的,并且Snack.h确实存在,那么你应该可以调用它

snackObject.getSnackPrice() * ammount

what you need is friend keyword. Define the

  friend class className;

I don't really understand why you don't just implement get() ? Accessing private data is really bad. You are breaking the encapsulation. But if you really want to know (ie you should NOT do it, it is really BAD), then you just return a reference to a private data as shown below

#include <iostream>

class A
{
public:
    A(int a) : x(a) {}
    int &getPrivateDataBAD() { return x; }
    void print() { std::cout << x << std::endl; }
private:
    int x;
};

class B
{
public:
    void print(int &s) { std::cout << s << std::endl; }
};

int main()
{
    A obj(2);
    B bObj;
    bObj.print( obj.getPrivateDataBAD() );

    return 0;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM