在两个类上使用类实例.c ++

时间:2014-01-13 07:23:00

标签: c++ oop

我基本上不知道怎么问这个问题,我对c ++还不太新...反正我的问题是,我正在尝试创建这个vendingmachine类和这个用户类,用户需要访问insertCoins来自vendingMachine.cpp的方法和makePurchase方法我尝试在user.cpp中的方法调用中创建类自动售货机的实例,因为它在这里,但是当我尝试在自动售货机中列出项目时,显然列表是不受影响的,因为实例我在user.cpp中的方法调用内部创建只是临时的...我如何得到一个全局实例,以便我在user.cpp中使用它,同时在main.cpp内的自动售货机中使用它...

#include "user.h"
#include "VendingMachine.h"

user::user(){
}

user::~user(){

}

void user::makePurchase(int choice){
    VendingMachine vm;
    vm.purchaseProduct(choice);
}

void user::insertCoins(double coin){
    VendingMachine vm;
    vm.insertCoins(coin);
}

~~~~~~~~~~~~~

#include "VendingMachine.h"
#include "machineOperator.h"
#include "user.h"
using namespace std;

int main(){

VendingMachine vm = VendingMachine();
user u = user();
vm.listProducts();
cout << endl;
u.insertCoins(1.0);
u.insertCoins(1.0);
u.makePurchase(2);
vm.listProducts();
cout << endl;

return 0;

 }

~~~~~~~~~~~~~~~~~~~

    /*
 * user.h
 *
 *  Created on: Jan 12, 2014
 *      Author: Andrey
 */

#ifndef USER_H_
#define USER_H_

class user {

public:
    user();
    ~user();
    void makePurchase(int);
    void insertCoins(double);
};

#endif /* USER_H_ */

2 个答案:

答案 0 :(得分:4)

很自然地假设用户可以从许多不同的自动售货机购买并插入硬币。

void user::makePurchase (VendingMachine &vm, int choice)
{
    vm.purchaseProduct(choice);
}

void user::insertCoins (VendingMachine &vm, double coin)
{
    vm.insertCoins(coin);
}

答案 1 :(得分:0)

在用户中使用指向VendingMachine的指针并将其传递给构造函数。

user.h

class VendingMachine;

class User {
    private:
        VendingMachine* vm;
}

user.cc

#include "user.h"
#include "vendingmachine.h"

User::User(VendingMachine* vm): vm(vm) {}

void User::makePurchase(int choice){
    vm->purchaseProduct(choice);
}

void User::insertCoins(double coin){
    vm->insertCoins(coin);
}

main.cc

#include "VendingMachine.h"
#include "machineOperator.h"
#include "user.h"
using namespace std;

int main(){

    VendingMachine vm = VendingMachine();
    User u = User(&vm);
    vm.listProducts();
    cout << endl;
    u.insertCoins(1.0);
    u.insertCoins(1.0);
    u.makePurchase(2);
    vm.listProducts();
    cout << endl;

    return 0;

}