Wywoływanie funkcji przy jej dodawaniu do wektora

0

Witam,
napisałem taki prosty program:

#include <iostream>
#include <vector>
#include <string>
using namespace std; 

class czlowiek {
private:
	int liczbaludzi;
	string Nazwa;
	vector<czlowiek*> vLudzie;
	vector<czlowiek*>::iterator it; 
	string jakanazwa;
public:
	czlowiek();
	~czlowiek();
	string WyjebNazwe();
};

czlowiek::czlowiek(){
	cout << "WASSSSUUUP, Podaj moje imie!" << endl;
	cin >> Nazwa;
};

czlowiek::~czlowiek(){
	cout << endl << "FFFFFFUUUUUUUUUU-" << endl << "Ja, " << Nazwa << ", umrzywam. :<" <<endl;
};

string czlowiek::WyjebNazwe(){
	return Nazwa;
};

int main(){
	int liczbaludzi;
	vector<czlowiek*> vLudzie;
	vector<czlowiek*>::iterator it; 
	string jakanazwa;

	// TWORZENIE I NAZYWANIE LUDZI
	cout << "Ilu ludzi tworzymy? ";
	cin >> liczbaludzi;
	for (int i = 0; i < liczbaludzi; i++){
		vLudzie.push_back(new czlowiek());
	}

	// SZUKANIE LUDZI
	cout << "Czlowieka o jakiej nazwie mam znalezc? ";
	cin >> jakanazwa;
	for(it = vLudzie.begin(); it!=vLudzie.end(); it++) 
	{
        if ((*it)->WyjebNazwe() == jakanazwa)
			cout << "Jest z nami " << (*it)->WyjebNazwe() << "! :D" << endl;
	}

	// USUWANIE PODANEGO CZLOWIEKA
	cout << "Kogo mam dzis skasowac? >:D";
	cin >> jakanazwa;
	for(it = vLudzie.begin(); it!=vLudzie.end(); it++) 
	{
        if ((*it)->WyjebNazwe() == jakanazwa)
			delete (*it);
	}

	system("pause");
	return 0;
};

i chcę go teraz przerobić tak, aby w funkcji main() wywołać jedynie metody, np.:

 
czlowiek.TworzenieLudzi();
czlowiek.NazywanieLudzi();
czlowiek.SzukanieLudzi();
czlowiek.UsuwanieLudzi();

Aktualnie nazywanie ludzi mam w konstruktorze, więc borykam się z jednym problemem. Z tego co mi wiadomo, aby korzystać z programu w sposób, jaki napisałem powyżej (w funkcji main() tylko metody) muszę najpierw utworzyć obiekt danego typu.

 
czlowiek Ludek;

Ludek.TworzenieLudzi();
Ludek.NazywanieLudzi();
Ludek.SzukanieLudzi();
Ludek.UsuwanieLudzi();

i wszystko byłoby fajnie, gdyby nie nazywanie w konstruktorze. Przy utworzeniu obiektu klasy czlowiek generowany jest pierwszy Ludek, który już pyta mnie o imię. Chcę, aby pytał mnie o imię dopiero przy wywoływaniu funkcji składowych.
W jaki sposób to zrobić?

1

Ciekawa nazwa metody zwracającej nazwę. Łączysz w klasie człowiek dwie różne odpowiedzialności, przechowywanie ludzi oraz opis człowieka, podziel to na dwie różne klasy. Ogólnie w pełni twojego pytania nie zrozumiałem, ale taką bardziej skomplikowaną interakcje z użytkownikiem (nawet właśnie pytanie-odpowiedź) dałbym osobno od klasy Czlowiek (dla uproszczenia może być np. normalna funkcja lub składowa statyczna zwracająca nową instancję Czlowiek).

0

Bardzo dziękuję za naprowadzenie na szersze rozdzielenie tego - cóż, jak widać, nie myślę jeszcze całkiem obiektowo. ;-)
Poniżej umieszczam program - jeśli coś da się zrobić prościej lub lepiej, bardzo proszę o napisanie posta z uwagami - z pewnością nie pozostanie to obojętne dla mojej wiedzy.

#include <iostream>
#include <vector>
#include <string>
using namespace std; 

class czlowiek {
private:
	string Nazwa;
public:
	czlowiek();
	~czlowiek();
	string ZwrocNazwe();
	void NazwijCzlowieka();
};

czlowiek::czlowiek(){
	cout << "WASSSSUUUP, Podaj moje imie!" << endl;
	cin >> Nazwa;
};

czlowiek::~czlowiek(){
	cout << endl << "FFFFFFUUUUUUUUUU-" << endl << "Ja, " << Nazwa << ", umrzywam. :<" <<endl;
};

string czlowiek::ZwrocNazwe(){
	return Nazwa;
};

class ludzie {
private:
	int liczbaludzi;
	string jakanazwa;
	vector<czlowiek*> vLudzie;
	vector<czlowiek*>::iterator it; 
public: 
	void TworzenieLudzi();
	void SzukanieLudzi();
	void UsuwanieLudzi();
};

void ludzie::TworzenieLudzi()
{
	cout << "Ilu ludzi tworzymy? ";
	cin >> liczbaludzi;
	for (int i = 0; i < liczbaludzi; i++){
		vLudzie.push_back(new czlowiek());
	}
};

void ludzie::SzukanieLudzi()
{
	cout << "Czlowieka o jakiej nazwie mam znalezc? ";
	cin >> jakanazwa;
	for(it = vLudzie.begin(); it!=vLudzie.end(); it++) 
	{
        if ((*it)->ZwrocNazwe() == jakanazwa)
			cout << "Jest z nami " << (*it)->ZwrocNazwe() << "! :D" << endl;
	}
};

void ludzie::UsuwanieLudzi()
{
	cout << "Kogo mam dzis skasowac? >:D";
	cin >> jakanazwa;
	for(it = vLudzie.begin(); it!=vLudzie.end(); it++) 
	{
        if ((*it)->ZwrocNazwe() == jakanazwa)
			delete (*it);
	}
};

int main()
{
	ludzie gromada;

	gromada.TworzenieLudzi();
	gromada.SzukanieLudzi();
	gromada.UsuwanieLudzi();

	system("pause");
	return 0;
};

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