Loading...
BalioFVFX avatar BalioFVFX 40 Точки

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 40 Точки

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 40 Точки

Здравей, благодаря че се отзова! Проблема е, че когато искам да сложа някаква стойност на 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 40 Точки

Здравейте, реших малко да подобря "Машината за кола", когато 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 Trainer 6849 Точки

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

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

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

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

Здравейте, реших да се опитам да направя 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 40 Точки

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

0
BalioFVFX avatar BalioFVFX 40 Точки

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

 

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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.