Dostęp do zmiennej w każdej klasie, pomocy.

0

Witam!

Mam dwie klasy: magazyn, sklep. W klasie magazyn zadeklarowaną zmienną "stan_magazynu", jak zrobić abym miał dostęp do tej zmiennej w klasie sklep? Chodzi mi to, że załóżmy początkowa wartość "stan_magazynu"=0; ale w klasie sklep chcę zrobić: "stan_magazynu+=5;" ?

0

Magazyn warehouse;

warehouse.stan_magazynu = warehouse.stan_magazynu + 5;

0

Jak pole prywatne? publiczne? chronione? Te klasy po dobie dziedziczą? Pierwsze co mi przychodzi to głowy to metody które zwrócą Ci pożądaną wartość, i metody które ją ustawią, pokaż kod to coś więcej będzie wiadomo.

0
daniel1302 napisał(a):

Magazyn warehouse;

warehouse.stan_magazynu = warehouse.stan_magazynu + 5;

Obiekt mam wywołany w main(), w jednej klasie zadeklarowany stan_magazynu, a w drugiej chcę go edytować(żeby potem w tej pierwszej była uwzględniona ta edycja) -

0
przemyslowiec napisał(a):

Jak pole prywatne? publiczne? chronione? Te klasy po dobie dziedziczą? Pierwsze co mi przychodzi to głowy to metody które zwrócą Ci pożądaną wartość, i metody które ją ustawią, pokaż kod to coś więcej będzie wiadomo.

Wszystkie zmienne są publiczne, bez dziedziczenia niczego. Pokombinuję z funkcją :-)

0

Jak nie będzie Ci wychodziło to pokaż kod, bo obecnie nie wiem o co Ci chodzi do końca.

0
przemyslowiec napisał(a):

Jak nie będzie Ci wychodziło to pokaż kod, bo obecnie nie wiem o co Ci chodzi do końca.

Tutaj deklaracja klasy

class Magazyn
{
public:
	Magazyn();
	~Magazyn();
	float stan_bulek;
	void menu();
	
};

Tutaj wykorzystanie tego w "Magazyn.cpp"

case 1:
			 {
				 cout << "Ile sztuk przywieziono?" << endl;
				 cin >> dostawa_bulek;
				 stan_bulek += dostawa_bulek;
				
			 }

Tutaj chce własnie aby edytowało mi ta wartosc "stan_bulek", zeby zmieniało ją dla calego programu

case 1:
			{
				cout << "Podaj ilosc: " << endl;
				cin >> ilosc_bulek;
				cena_bulek = (ilosc_bulek*0.3);
				stan_bulek -= ilosc_bulek;
			}

i w main() mam wywołane po jednym obiekcie z klasy Zakupy i Magazyn

0

Utwórz sobie w sklep magazyn i problem rozwiązany.

0
przemyslowiec napisał(a):

Utwórz sobie w sklep magazyn i problem rozwiązany.

void Zakupy::menu()
{
	Magazyn magazyn;

	
		    case 1:
			{
				cout << "Podaj ilosc: " << endl;
				cin >> ilosc_bulek;
				cena_bulek = (ilosc_bulek*0.3);
				
				magazyn.stan_bulek -= ilosc_bulek;
				goto menu_sklep;
			}
			
int main()
{
	Magazyn magazyn;
	Zakupy zakupy;
	

Zrobiłem tak i dalej to samo, wartość stan_bulek taka jak przy deklaracji, pomimo zmiany

0

Pokaż całość, bo widzę że masz źle, szybko pozmieniam i zobaczysz co jest nie tak

0
przemyslowiec napisał(a):

Pokaż całość, bo widzę że masz źle, szybko pozmieniam i zobaczysz co jest nie tak

Całość jest trochę obszerniejsza, mam nadzieję, że się połapiesz,

tutaj glowna

#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <cstdlib>
#include <ctime>
#include "Zakupy.h"
#include "Magazyn.h"
#include "Sklep.h"

using namespace std;




int main()
{
	int wybor1, wybor2, wybor3, wybor4;
	string login, haslo;
	Zakupy zakupy;
	Magazyn magazyn;
	Sklep sklep;
	
	menu_glowne:
	
	cout << "1. SKLEP" << endl;
	cout << "2. WLASCICIEL" << endl;
	cout << "3. WYJDZ" << endl;
	cin >> wybor1;
	switch (wybor1)
	{
	   case 1:
	  {
		zakupy.menu();
		goto menu_glowne;
	  }
	   case 2:
	  {
			   menu_wlasciciela:
			   cout << "1. Zarzadzaj magazynem" << endl;
			
			   cout << "3. Wroc" << endl;
			   cin >> wybor2;
			   system("CLS");
			   switch (wybor2)
			   {
			       case 1:
				   magazyn.menu();
				   goto menu_wlasciciela;
			       case 3:
				   goto menu_glowne;
			   }
	  }
	}
    return 0;
}

Tutaj Magazyn.cpp

#include "stdafx.h"
#include "Magazyn.h"

Magazyn::Magazyn()
{
	stan_bulek = 0; 
}


Magazyn::~Magazyn()
{
}
void Magazyn::menu()
{
	
	cout << "Co chcesz zrobic?" << endl;
	cout << "1. Dodaj produkty" << endl; 
	cout << "2. Sprawdz stan magazynu" << endl;
	cout << "3. Wroc" << endl;
	cin >> wybor_magazyn;
	system("CLS");
	switch (wybor_magazyn)
	{
	     case 1:
	   {
			 menu_dodajprodukt:
			 cout << "Jaki produkt chcesz dodac?" << endl;
			 cout << "1. Bulki" << endl;
			 cin >> wybor_dodania;
			 system("CLS");
			 switch (wybor_dodania)
			 {
			 case 1:
			 {
				 cout << "Ile sztuk przywieziono?" << endl;
				 cin >> dostawa_bulek;
				 system("CLS");
				 stan_bulek += dostawa_bulek;
				 goto menu_dodajprodukt;
			 }
			 
			 case 11:
				 goto etyk;
			 }
	   }
		 case 2:
	   {
			 cout << "W magazynie jest(w sztukach):" << endl;
			 cout << "====Pieczywo=========" << endl;
			 cout << "Bulka: " << stan_bulek << endl;
	   }
		 case 3:
			 etyk:
			 break;
	}
}


tutaj Magazyn.h

#pragma once
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include "Zakupy.h"


using namespace std;
class Magazyn
{
public:
	Magazyn();
	~Magazyn();
	float stan_bulek;
	int dostawa_bulek;
	int wybor_magazyn, wybor_dodania;
	void menu();
};

Tutaj Zakupy.cpp

#include "stdafx.h"
#include "Zakupy.h"
#include "Magazyn.h"



Zakupy::Zakupy()
{
	cena_bulek = 0;
}
	


Zakupy::~Zakupy()
{
}

void Zakupy::menu()
{
	
menu_sklep:
	cout << "Wybierz odpowiednia kategorie" << endl << endl;
	cout << "1. Pieczywo" << endl;
	cout << "6. Sprawdz koszyk" << endl;
	cout << "7. Wroc do poprzedniego menu" << endl;
	cin >> wybor;
	switch (wybor)
	{
	case 1:
	{
		cout << "Aby dodac do koszyka wybierz produkt:" << endl;
		cout << "1. Bulka(0,30zl)" << endl;
		cin >> wybor_pieczywa;
		system("CLS");
		switch (wybor_pieczywa)
		{
		    case 1:
			{
				cout << "Podaj ilosc: " << endl;
				cin >> ilosc_bulek;
				cena_bulek = (ilosc_bulek*0.3);
				stan_bulek-= ilosc_bulek;
				goto menu_sklep;
			}
			
		}
	}
	case 6:
	{
		cout << "TWOJ KOSZYK:" << endl;
		cout << endl;
		cout << "      ILOSC      |        CENA       " << endl;
		cout << endl;
		if (ilosc_bulek > 0)
		{
			cout << "BULKI:    " << ilosc_bulek << "     |     " << cena_bulek << "  zl" << endl;
		}
		
		cena_koszyka = cena_bulek;
		cout << "Do zaplaty: " << cena_koszyka << " zl" << endl;
		cout << "Nacisnij dowolny przycisk aby wrocic";
		system("pause");
		goto menu_sklep;
	}
	case 7:
		break;
	}
}

Tutaj Zakupy.h

#pragma once
#include <iostream>
#include <string>
#include <vector>
#include <cstdlib>
#include <ctime>
#include "Magazyn.h"

using namespace std; 

class Zakupy
{
public:
	Zakupy();
	~Zakupy();
	float cena_bulek, cena_koszyka;
	int wybor, wybor_pieczywa;
	float ilosc_bulek;
	void menu();
	
	
};

Zamysł jest taki, że wpisuje w magazynie ze przywieziono 100 bulek(stan_bulek=100) potem robiac zakupy kupuje(wkladam do koszyka) 50 bułek i chcę żeby wtedy stan_bulek=100-50-50

0

Jednak szybko tego nie pozmieniam, ciężko tu się połapać przez to goto, moja rada taka że jeśli się uczysz z kursu i pokazują takie zastosowanie goto tu uciekaj z niego i zapomnij co tam było, goto jest złą praktyką i wybaczalne użycie jest wtedy gdy masz jakieś głębokie pętle warunki i tak jest po prostu łatwiej, ale nie używa się goto powszechnie tak jak u Ciebie, podziel sobie bardziej metody w klasach niech będą różne do "kupowania bułek" i "dostawa bułek" ogólnie problem jest taki że nie przekazujesz nigdzie tego obiektu na którym chcesz pracować, jak go tworzysz w metodzie to on jest w tej metodzie tylko jak kończy się wykonywać metoda to on "ucieka" a wartość w obiekcie w którym chcesz wykonać operację się nie zmienia, przekaż sobie ten obiekt przez referencję albo utwórz go w tym obiekcie. Moja rada może bolesna to zacznij to pisać od nowa, bez tych goto i w bardziej przemyślany sposób.

0

Jeżeli dobrze połapałem się w kodzie to podczas wywoływania metody zakupy.menu() zrób przekazywanie obiektu magazyn przez referencje. Wtedy będziesz operować na rzeczywistym stanie magazynu

1 użytkowników online, w tym zalogowanych: 0, gości: 1