Konstruktory i walidacja danych

0

Cześć

Chciałem was zapytać o sposoby sprawdzania danych wejściowych użytkownika tzn jak to się poprawnie powinno robić. Załóżmy że mam taką klasę oraz pól jest zdecydowanie więcej("[...]"):

class Osoba
{
private:
	string Imie;
	string Nazwisko;
	usinged int Pesel;
	string Id;
	string Wzrost;
	string KolorOczow;
	string KolorWlosow;
	string Email;
	int Telefon
	char Plec;
	[...]

public:
	Osoba(string imie, string nazwisko, unsigned int id, string wzrost, string koloroczu, string kolorwlosow, string email, int telefon, char plec, ....)
	{
		/*
		W konstruktorze wypluwam wyjątki dla każdej "złej" wartości zmiennej
		*/
	}
	~Osoba()
	{
	
	}
}
 

W konsoli pobieram od użytkownika każdą daną i dopiero na koniec tworze obiekt Osoba na podstawie tego co podał user - i tu osobiście jako użytkownik takiego programu ostro bym się wkurzył w sytuacji ponownego podania wszystkich danych po wyrzuceniu wyjątku że coś zostało źle wpisane.

A może inne wyjście: dla każdego pola prywatnego "X" tworzę metody SetX(oraz GetX) które zwracają 'bool' więc użytkownik może poprawić dane od razu w zasadzie.

Jak to powinno być poprawnie zaimplementowane? Czytałem, że w C# stosuję się akcesory set{} i get{} które według mnie nieco ułatwiają sprawę. Czy coś takiego warto, ma w ogóle sens implementować w C++ ?

Dzięki
Kamil

0

Podziel klasę na dwie:
class DaneOsobowe - nie wyrzucasz wyjątku tylko ustawiasz odpowiednie flagi - co jest źle.
class Osoba pochodzi od DaneOsobowe w konstruktorze podajesz obiekt DaneOsobowe wywalasz wyjątek jeżeli w DaneOsobowe stoi jakaś niedobra flaga.

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