• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SFML argumenty klasy

Object Storage Arubacloud
+1 głos
178 wizyt
pytanie zadane 23 maja 2015 w Rozwój zawodowy, nauka, praca przez Pan Kulomb Pasjonat (18,630 p.)

Mam klasę MapMiniature jako zmienną prywatną w klasie MapEditor. MapMiniature potrzebuje 2 innych klas: Map oraz TextureSet. Gdy otrzymuję je w konstruktorze w MapEditor wygląda to tak:


private:

MapMiniature miniature{map, textureSet};

 

Nie podoba mi się użycie {} zamiast (), a najlepiej to chciałbym, aby można było zrobić tak:

MapMiniature miniature;


miniature.setMap(map);
miniature.setTextureSet(textureSet);

//tutaj byłyby już dostępne inne metody

miniature.move(sf::Vector2f(100, 100));

Tylko jak zrobić aby nie można było korzystać z innych metod zanim wywoła się te?

1 odpowiedź

0 głosów
odpowiedź 24 maja 2015 przez Bartek85 Mądrala (7,440 p.)
Wklej proszę deklaracje tej klasy.
komentarz 29 maja 2015 przez Pan Kulomb Pasjonat (18,630 p.)
komentarz 29 maja 2015 przez Bartek85 Mądrala (7,440 p.)

Hm... Jeżeli rozumiem Twoją idę to nie da się zrobić tak jak uważasz, ponieważ kompilator na etapie kompilacji nie umie przewidzieć, kiedy i co będzie dokładnie wywołane.

Poniżej wklejam mały przykład, jak można rozwiązać Twój problem. Nie jest ładny, jakbys sobie tego życzył, ale jedyny jaki przychodzi mi na myśl.

#include <iostream>

using namespace std;

class MyClass
{
private:
	bool _isInitialized;
	int _a;
	int _b;

public:
	MyClass()
	{
		_a = _b = 0;
		_isInitialized = false;
	}

	MyClass(int a, int b)
		:_a(a), _b(b)
	{
		_isInitialized = true;
	};

	void Init(int a, int b)
	{
		_a = a;
		_b = b;
		_isInitialized = true;
	}

	const int& GetA()
	{
		if (_isInitialized)
			return _a;
		else
			throw exception("Class is not initialized.");
	}

	const int& GetB()
	{
		if (_isInitialized)
			return _b;
		else
			throw exception("Class is not initialized.");
	}
};

int main()
{
	MyClass test1;
	MyClass test2(10, 20);

	cout << "test2 a=" << test2.GetA() << ", b=" << test2.GetB() << endl;
	
	try
	{
		cout << "test1 a=" << test1.GetA() << ", b=" << test1.GetB() << endl;
	}
	catch (exception e)
	{
		cerr << "Exception during get value from object test1 class. Exeption message=" << e.what();
	}

	getchar();
}

 

Podobne pytania

0 głosów
2 odpowiedzi 297 wizyt
pytanie zadane 19 stycznia 2017 w Java przez zperkowski Stary wyjadacz (11,150 p.)
0 głosów
2 odpowiedzi 841 wizyt
pytanie zadane 9 lutego 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
+1 głos
1 odpowiedź 355 wizyt
pytanie zadane 17 października 2016 w C i C++ przez niezalogowany

92,579 zapytań

141,431 odpowiedzi

319,657 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...