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

Dostęp do zmiennej w każdej klasie, pomocy.
CH
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 4 lata
  • Postów:11
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;" ?

atmal
Najlepiej będzie jak wrzucisz kod, wtedy każdy będzie widział co chcesz zrobić i jak to teraz wygląda.
kaczus
od tego masz klase, by tam byla metoda by dodal to piec, albo by ci podal aktualny stan magazynu - dostep do zmiennych zazwyczaj nie jest dobrym pomyslem.
daniel1302
  • Rejestracja:około 16 lat
  • Ostatnio:8 dni
0

Magazyn warehouse;

warehouse.stan_magazynu = warehouse.stan_magazynu + 5;


Head of the pprof.
PR
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 2 miesiące
  • Postów:316
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.

CH
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 4 lata
  • Postów:11
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) -

CH
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 4 lata
  • Postów:11
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ą :-)

PR
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 2 miesiące
  • Postów:316
0

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

CH
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 4 lata
  • Postów:11
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

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

Tutaj wykorzystanie tego w "Magazyn.cpp"

Kopiuj
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

Kopiuj
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

edytowany 1x, ostatnio: chelsonik
PR
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 2 miesiące
  • Postów:316
0

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

CH
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 4 lata
  • Postów:11
0
przemyslowiec napisał(a):

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

Kopiuj
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;
			}
			
Kopiuj
int main()
{
	Magazyn magazyn;
	Zakupy zakupy;
	

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

PR
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 2 miesiące
  • Postów:316
0

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

CH
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 4 lata
  • Postów:11
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

Kopiuj
#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

Kopiuj
#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

Kopiuj
#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

Kopiuj
#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

Kopiuj
#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

PR
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 2 miesiące
  • Postów:316
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.

kaczus
jak masz takie petle i warunki jest tym bardziej niewybaczalne. goto było przydatne w czasach, gdy kompilator słabo optymalizował, można było sobie mikrooptymalizacje robic, teraz za użycie każdorazowe programista powinien po łapach oberwać. Zazwyczaj powoduje to więcej złego niż dobrego
elradziu
  • Rejestracja:prawie 15 lat
  • Ostatnio:10 miesięcy
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


Potrzeba matką wynalazków.
A nauka i tak rządzi :p Science rules!!
edytowany 1x, ostatnio: elradziu
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)