Софтуерно Инженерство
Loading...
+ Нов въпрос
BalioFVFX avatar BalioFVFX 37 Точки

C++ Викане на функция в друг Header?

Здравейте, имам проблем с викането на променлива и слагането на стойност в друг Header файл. Това което се опитвам да направя е нещо като Cola Machine, просто търих и попаднах на Project Ideas и реших да се захвана..

 

Ето го кода:

Person.h:

 

#include <iostream>
#include <string>
#pragma once
using namespace std;

class Person
{
public:
	float balance;
	
	void printBalance();
	void setBalance();
};

 

Това което се опитвам да направя е, да извикам Balance и когато, if-овете проверяват дали има пари, да взимат или съответно да казва "Нямате пари"

 

ColaMachine.cpp : 

 

#include <iostream>
#include <string>
#include "ColaMachineStocks.h"
#include "Person.h"

using namespace std;

ColaMachineStocks Stocks;

Person personFunctions;



void setbalance()
{
	personFunctions.balance = 200;
}





void Person::printBalance()
{
	cout << personFunctions.balance <<endl;
}


void setbalance();

void ColaMachineStocks::buyCola()
	{
		if (personFunctions.balance >= 100)
		{
			cout <<"You sucessful purschased Cola!"<<endl;
		
			personFunctions.balance =-10;
		}
		
		else
		{
			cout << "You dont have enough money!"<<endl;
		}
	}

		void buySprite(float priceForSprite = 5)
	{
	
		personFunctions.balance =-5;

	}


	void buyWater(float priceForWater = 1)
	{
	
		personFunctions.balance =-1;

	}


	void buyFanta(float priceForFanta)
	{
	
		personFunctions.balance =-15;

	}



 

Тагове:
0
C++ Programming 13/08/2016 14:16:05
BalioFVFX avatar BalioFVFX 37 Точки

UP!
Ето какво съм написал и в Main файла:

 

#include <iostream>
#include <string>
#include "ColaMachineStocks.h"
#include "Person.h"
using namespace std;

int userInput;



int main()
{
	Person aPerson;

	Person personFunctions;

	cout <<" C-O-L-A - M-A-C-H-I-N-E"<<endl; cout << "Your balance is: ";
	ColaMachineStocks Stocks;
	Stocks.cocacola = "Coca Cola";
	Stocks.water = "Water";
	Stocks.fanta = "Fanta";
	Stocks.sprite = "Sprite";
	ColaMachineStocks aMachine;
	aPerson.printBalance();
	aMachine.buyCola();
	aPerson.printBalance();
	


	
		


}

 

0
VenelinGrozev avatar VenelinGrozev 130 Точки

Какъв точно е проблема? Като гледам balance променливата в класа Person ти е публична и можеш да я променяш както си искаш.

Нещо не ми е ясно в методите за промяна на кол-вата

void buyFanta(float priceForFanta)
	{	
		personFunctions.balance =-15;
	}

Така написано personFunctions.balance ще стане равно на -15 след изпълнението. Ако идеята е да се намали баланса с 15 пари то трябва да е така

personFunctions.balance -= 15;

 

0
BalioFVFX avatar BalioFVFX 37 Точки

Здравей, благодаря че се отзова! Проблема е, че когато искам да сложа някаква стойност на balance се получава това:

 

Това което искам да се получи е:
Да задам стойност на balance в ColaMachine.cpp
Зададената стойност да се взима след изпълние на функция void buyFanta();

Надявам се съм бил ясен, благодаря!

0
13/08/2016 23:12:45
M.Yankov avatar M.Yankov 52 Точки

Ако пробваш така:

personFunctions.balance = 20.0f;

Въпреки че не ми се струва това да е проблем от int към float.

0
BalioFVFX avatar BalioFVFX 37 Точки

Здравейте, реших малко да подобря "Машината за кола", когато user-ът купува неща, те да се съхраняват в някакъв контейнер.. Според вас какъв би бил кадърния начин да се направи? Ето част от кода:

ColaMachine.cpp:

#include <iostream>
#include <string>
#include "ColaMachineStocks.h"
#include "Person.h"
int usercustombalance;
using namespace std;

ColaMachineStocks Stocks;

Person personFunctions;


void Person::setBalance()
{
	cout <<"How much money do you have?"<<endl;
	cin >>usercustombalance;
	personFunctions.balance = usercustombalance;
}

void ColaMachineStocks::printstocks()
{
	cout <<"1.Coca Cola | Price - 10$"<<endl;
	cout <<"2.Sprite    | Price - 5$"<<endl;
	cout <<"3.Water     | Price - 1$"<<endl;
	cout <<"4.Fanta     | Price - 15$"<<endl;
	cout <<"5.Exit      | -----------"<<endl;
}



void Person::printBalance()
{
	cout << "Your balance is: " <<usercustombalance<<endl;
}

void setbalance();

void ColaMachineStocks::buyCola()
	{
		if (usercustombalance >= 10)
		{
			cout <<"You sucessful purschased Cola!"<<endl;
		
			usercustombalance -= 10;
		}
		
		else
		{
			cout << "You dont have enough money!"<<endl;
		}
	}

void ColaMachineStocks::buySprite()
	{
		if (usercustombalance >= 5)
		{
			cout <<"You sucessful purschased Sprite!"<<endl;
		
			usercustombalance -= 5;
		}
		
		else
		{
			cout << "You dont have enough money!"<<endl;
		}
	}



	void ColaMachineStocks::buyWater()
	{
		if (usercustombalance >= 1)
		{
			cout <<"You sucessful purschased Water!"<<endl;
		
			usercustombalance -= 1;
		}
		
		else
		{
			cout << "You dont have enough money!"<<endl;
		}
	}



	void ColaMachineStocks::buyFanta()
	{
		if (usercustombalance >= 15)
		{
			cout <<"You sucessful purschased Fanta!"<<endl;
		
			usercustombalance -= 15;
		}
		
		else
		{
			cout << "You dont have enough money!"<<endl;
		}
	}

Source.cpp:

 

#include <iostream>
#include <string>
#include "ColaMachineStocks.h"
#include "Person.h"
using namespace std;

int userInput;



int main()
{
	Person aPerson;

	Person personFunctions;

	cout <<" C-O-L-A - M-A-C-H-I-N-E"<<endl;
	ColaMachineStocks Stocks;
	Stocks.cocacola = "Coca Cola";
	Stocks.water = "Water";
	Stocks.fanta = "Fanta";
	Stocks.sprite = "Sprite";
	ColaMachineStocks aMachine;
	
	personFunctions.setBalance();
	
	aMachine.printstocks();

	while(true)
	{

	cout <<endl; cout <<"Please select a stock!"<<endl;
	
	cin >> userInput;



	if(userInput == 1)
	{
		aMachine.buyCola();
		aPerson.printBalance();
	}
	else if(userInput == 2)
	{
		aMachine.buySprite();
		aPerson.printBalance();
	}
	else if(userInput == 3)
	{
		aMachine.buyWater();
		aPerson.printBalance();
	}
	else if(userInput == 4)
	{
		aMachine.buyWater();
		aPerson.printBalance();
	}
	else if(userInput == 5)
	{
		break;
	}
	else
	{
		cout <<"Invalid input!"<<endl;
	}
	
	}
	}

Аз си мисля за Map, но нека чуя вашите предложения, също така бих искал съвет за оптимизация на кода, като цяло да е по-четлив.
Сегашният Output:

 

 C-O-L-A - M-A-C-H-I-N-E
How much money do you have?
20
1.Coca Cola | Price - 10$
2.Sprite    | Price - 5$
3.Water     | Price - 1$
4.Fanta     | Price - 15$
5.Exit      | -----------

Please select a stock!
1
You sucessful purschased Cola!
Your balance is: 10

Please select a stock!
5
Press any key to continue . . .

Бих искал да е нещо такова:

C-O-L-A - M-A-C-H-I-N-E
How much money do you have?
100
1.Coca Cola | Price - 10$
2.Sprite    | Price - 5$
3.Water     | Price - 1$
4.Fanta     | Price - 15$
5.Exit      | -----------

Please select a stock!
1
You sucessful purschased Cola!
Your balance is: 90

Please select a stock!
4
You sucessful purschased Water!
Your balance is: 89

Please select a stock!
3
You sucessful purschased Water!
Your balance is: 88

Please select a stock!
1
You sucessful purschased Cola!
Your balance is: 78

Please select a stock!
5
.

You have sucessful purschased Cola, Fanta,Water,Cola, или пък You have sucessful purschased Colax2, Fanta,Water.
Press any key to continue . . .

Предварително благодаря!

 

0
RoYaL avatar RoYaL SoftUni Team Trainer 6883 Точки

Ами като цяло всичките if/elseif крещят отдалеч за липса на полиморфизъм. След като фикснеш това можеш да направиш мап, в който съхраняваш купените неща, да, за да може лесно да изкарваш по купено нещо, ако това те интересува - например колко Кола или колко Фанта е купил потребителят.

0
15/08/2016 15:57:09
BalioFVFX avatar BalioFVFX 37 Точки

Нещо не мога да го схвана това с Polymorphism-а, той ще ми замени if-else или ако изполвам switch, или? Ще може ли syntax, как точно трябва да се направи? Колкото за контейнер, ще използвам map, ще се опитам и да разбера това с "Липсата на полиморфизъма", после ще пусна update докъде съм стигнал. 

0
15/08/2016 17:24:09
BalioFVFX avatar BalioFVFX 37 Точки

Здравейте, реших да се опитам да направя map, но ето го и новия проблем, когато потребителя реши да спре програмата, тя дава outuput, че е закупил "Coca Cola",както е направено, но не дава какво количество е закупено. 

Ето новостите по кода който пиша //Целия код може да го намерите в последното ми коментар на кода, понеже става много спам, ако реша да paste-вам всеки път 100 реда код.. 

 

map<string, int> userContainer;

int q = 0;


void printMap()
{
	for(auto it = userContainer.cbegin(); it != userContainer.cend(); ++it)
	{
		std::cout << it->first; q;
	}
}

Ето в main функцията при if-а за Coca Cola: 

 

if(userInput == 1)
	{
		aMachine.buyCola();
		aPerson.printBalance();
		userContainer.insert(pair<string,int>("Coca Cola - ",q++));	
	}

След while цикъла:
 

printMap();

Output-а на програмата е следния: Взимаш 10 коли, но показва само "Coca Cola" Press any key, вместо очакваното Coca Cola x10.

0
15/08/2016 22:07:58
BalioFVFX avatar BalioFVFX 37 Точки

Благодаря, утре ще погледна и ще ъпдейтна! Лека вечер! :)

0
BalioFVFX avatar BalioFVFX 37 Точки

Здравей, оправих се с това по следния начин:

 

void printMap()
{
	for(auto it = userContainer.cbegin(); it != userContainer.cend(); ++it)
	{
		std::cout << it->first;
		std::cout << it->second;
	}
}

Обаче сега имам друг проблем, искам при всяко изпълнение на if-а, мапа да слага +1 на Coca Cola, и така да стане Coca Cola x10 примерно..

Ето го if:

if(userInput == 1)
	{
		aMachine.buyCola();
		aPerson.printBalance();
		userContainer.insert(pair<string,int>("Coca Cola - ", 1));	
		}

 

0