Poprawa kodu c++

0

Witam mógłby ktoś pomóc rozwiązać to zadanie.
Początkowe błędy jak np int imie zamiast string imie, albo string ~Osoba() zamiast ~ Osoba() są proste ale im dalej tym mniej wiem :)

Przeanalizuj i popraw braki oraz błędy w programie:

#include <iostream>

using namespace std;

class Osoba
{
    private:        
        int imie;
        string nazwisko;
        // pĹeÄ
        char plec;
        // rola
        string rola;
        // zmienne daty urodzenia        
        int ur_rok, ur_mies, ur_dzien;
        // zmienna liczÄca iloĹÄ osĂłb w rodzinie
        static ile_osob;
    public:    
        Osoba(string imie, string nazwisko, char plec, string rola, int rok, int mies, int dzien)
        {
			this->imie=imie;
			this->nazwisko = nazwisko;
			this->plec = plec;
			this->rola=rola;
			this->ur_rok=rok;
			this->ur_mies=mies;
			this->ur_dzien=dzien;
            ile_osob++;
        }
        string ~Osoba()
        {
            ile_osob++;
        }
        void Wyswietl()
        {
			string p = (plec=='M'?"MÄĹźczyzna":"Kobieta");
			cout<<p<<", "<<imie<<" "<<nazwisko<<", "<<rola<<" ur. "<<ur_rok<<"-"<<ur_mies<<"-"<<ur_dzien<<endl;
		}
        int IloscOsob()
        {
			return Osoba::ile_osob;
		}
		static void WyswietlIloscOsob()
        {
			cout<<"Osob: "<<Osoba::IloscOsob()<<endl;
		}
		
};
int Osoba::ile_osob=0;


int main()
{
	Osoba o1("Jan","Kowalski",'M',"Ojciec", 1967,11,21);
	Osoba o2("Tadeusz","Nowak",'M',"Kawaler", 1987,1,2);
	Osoba o3("Maria","Zdunska",'K',"ZamÄĹźna", 1971,7,11);
	o1.Wyswietl();
	o3.Wyswietl();
	Osoba::WyswietlIloscOsob();
	o2.Wyswietl();
	Osoba::WyswietlIloscOsob();
	
    return 0;
}

dodanie znacznika <code class="cpp"> - furious programming

0

Destruktor nic nie zwraca.
i jeszcze (chyba) metoda iloscOsob jest źle, trzeba się odwoływać jak do zwykłej składowej.
I metody lepiej żeby były poza definicją klasy. I dodaj słówko inline. I kolejność najpierw public, potem private.

0

Imię nie powinno być stringiem, destruktor bez zwracanego typu powinien być, destruktor nie powinien zwiększać ilości osób tylko zmniejszać, zmienna ilosc_osob powinna miec jakis typ, funkcja ilosc_osob powinna być static.

0

Poza oczywistymi błędami, to zrezygnowałabym z static a zamiast void Wyswietl(); zrobiła metodę std::string toString(); albo przeciążenie operatora <<. co jak chce założyć kilka rodzin?

	std::vector<Osoba> rodzinaA;
	rodzinaA.push_back(Osoba("Jan","Kowalski",'M',"Ojciec", 1967,11,21));
	rodzinaA.push_back(Osoba("Tadeusz","Nowak",'M',"Kawaler", 1987,1,2));
	rodzinaA.push_back(Osoba("Maria","Zdunska",'K',"ZamÄĹźna", 1971,7,11));
	std::cout << rodzinaA.size() << std::endl; //liczba osób w rodzinie
0

Wiem, że post był pisany już dwa dni temu, ale dorzucam coś od siebie:
Akcesory i metody wyświetlające tylko coś na ekranie, zabezpieczył bym słowem const, postawionym po nawiasach parametrów. Osobiście też, nie korzystał bym ze wskaźnika this - jak dla mnie jest to w tym wypadku niepotrzebne udziwnienie.

0

Pole ile_osob w klasie Osoba? - Chcesz zliczać obiekty tej klasy? Jeżeli chcesz zliczać członków rodziny to utwórz klasę potrafiącą przechowywać obiekty klasy Osoba i w niej utwórz pole ile_osob lub - co zostało powyżej zademonstrowane na przykładzie - wykorzystaj któryś z kontenerów standardowych.

Pola plec i rola zrobiłby typami wyliczeniowymi.

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