Wątek przeniesiony 2017-04-17 15:47 z C/C++ przez kq.

Resetowanie zmiennej w klasie

0
#include <iostream>
#define VOID 1024

using namespace std;

class Tekst
{
	public:
	char array[VOID];

	Tekst()
	{
	}

	void funkcja()
	{
		cout<<"Podaj slowo lub zdanie: "<<endl;
		cin>>array;
		cout<<("Slowo: ")<<array<<endl;
	}
	void wyswietl()
	{
		cout<<"Wyswietlam: "<<array<<endl;
	}
};

class Edytor
{
	public:
	Edytor()
	{
	}
	
	
	void uruchom()
	{
		Tekst obiekt;
		obiekt.funkcja();
	}
};
int main()
{
	Edytor pobierz;
	pobierz.uruchom();
	Tekst pokaz;
	pokaz.wyswietl();

return 0;
}

Wkleiłem tutaj mój testowy program do przesyłania zmiennej z klasy do klasy. Niestety resetuje się wartość tej zmiennej(tzn. jak wpisałem "aaaa" to zwraca w cout"-"(dosłownie myślnik)tudzież jakieś losowe znaki). Czemu zmienna resetuje się po wyjściu z klasy?

2

Mylisz klasy i obiekty. Modyfikacja jednego obiektu (np. nadanie imienia Jasiowi) nie modyfikuje innego (np. Małgosi), mimo, że jedno i drugie jest dzieckiem.

Weź jakąś książkę czy kurs do ręki.

BTW: wtf?

#define VOID 1024
char array[VOID];
0

Ale to jak w takim przypadku stworzyć obiekt wspolny? W kontekście tego przykładu, taki by mozna uruchomić funkcję: obiekt.funkcja(); i obiekt.wyswietl();. W którym miejscu tego przykładu należało by stworzyć: Tekst obiekt; aby był on wspólny dla int main() i class Edytor?

1

Zasadniczo chcesz unikać zmiennych globalnych. W małych programach to zazwyczaj nie problem, ale im bardziej on skomplikowany, tym łatwiej się w tym wszystkim pogubić — jedną rzecz może Ci nagle zmodyfikować pół programu i teraz trzeba szukać, co konkretnie psuje i dlaczego…

Ale — możesz to zrobić jako obiekt globalny (zadeklarowany poza funkcją main() i pochodnymi), możesz mieć to jako publiczną statyczną w klasie, której instancję stworzysz w main(), możesz mieć ją jako zmienną w main(), gdzie potem stworzysz instancję Edytor, możesz używać zmiennych statycznych… Rozwiązań jest wiele, większość bez sensu — pytanie co chcesz uzyskać.

0

Gdybym chciał stworzyć obiekt globalny poza klasą (tak by mogł by się on odwoływac do każdej klasy) to jakich poleceń uzyć, co musiał bym sie nauczyć zeby to zrobić?

0

Musiałbyś się nauczyć tego, co to są deklaracje zmiennych i jakie są zakresy ich ważności. Po czym napisać deklarację poza funkcją main(), tak jak napisałem.

Ale znowu — po co? Bo to, co chcesz zrobić, to brzydkie rozwiązanie i wcale nie jestem przekonany, że masz problem, który czegoś takiego wymaga…

0

To jakie było by "ładne" rozwiązanie? Chcę wywołac funkcje: wyswietl() z innej klasy (lub z int main() ) tak by wartość array (dla obiektu: obiekt) nie zmieniła się.

1

Jak dla mnie borykasz się z problemem XY. Opisz co chcesz osiągnąć, a nie jak.

0

Najzwyczajniej w świecie chce by program wyżej działał. Chce wywołać metodę z klasy której obiekt został stworzony w innej klasie. By Tekst pokaz; był tym samym co Tekst obiekt; Nie wiem jak to inaczej wyjaśnić

0

Tym samym nie będzie, ale możesz przekazać obiekt w argumentach metody *.Uruchom() i działać na tym obiekcie.

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