2017-04-19 183 views
1

基於我的Snack.cpp,Snack頭文件,MiniVend頭文件& miniVend.cpp文件,我試圖將我的Snack私有成員 - 價格移動到我的MiniVend.cpp文件中以生成金額*價格以返回總值在我的機器中的項目。我如何從另一個班級獲得價格?我的miniVend.cpp的如何將私有成員變量傳遞給另一個類?

部分文件

double miniVend::valueOfSnacks() 
    { 

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

    } 

miniVend頭

#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 
+0

你叫'getSnackPrice()'的零食很明顯? – immibis

+0

雖然我需要從miniVend調用。我需要從我的miniVend課程中確定總價值。 – Timk10

+0

返回私人日期的引用,但這真的很糟糕。 – CroCo

回答

0

假設getSnackPrice()是公共的,和Snack.h確實存在,你應該只能打電話

snackObject.getSnackPrice() * ammount 
+0

我是否必須在miniVend頭文件中創建snackObject項目? – Timk10

+0

我可能會將數組或零食地圖傳遞給getValueOfSnacks()函數,然後遍歷它。這一切都取決於您如何將數據存儲在自動售貨機中。 – rhysvo

0

你需要的是朋友關鍵字。定義

friend class className; 
+0

不幸的是,我們還沒有涉及繼承,所以我不能使用它:(這將是100倍更容易。 – Timk10

+0

您可以使用代理類如:ClassName * VariableName = reinterpret_cast &PrivateVariableClass;這樣你可以訪問私有變量。 –

0

我真的不明白你爲什麼不只是實施get()?訪問私人數據非常糟糕。你打破封裝。但是,如果你真的想知道(即你不應該這樣做,這是非常糟糕的),那麼你可以返回到私人數據的引用如下圖所示

#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; 
} 
+0

你的意思是在VendSlot中實現get函數來將零食價格移動到那裏? – Timk10

+0

對不起,但我沒有看看代碼,我只是回答了標題,我說的是如果你想要獲取A類的私有數據,然後實現一個成員函數'get()'返回私有數據的值,'A obj; x = obj.get();' – CroCo

+0

不用擔心 - 我確實有一個獲取函數,但是我需要從另一個類完全訪問該函數。 – Timk10

相關問題