chciałbym zdefiniować nową klasę wyprowadzoną z tej klasy, która będzie zawierała:
- oprócz pól odziedziczonych, pole prywatne (nrIndeksu) typu wskaźnik na znak,
- konstruktor wywołujący konstruktor klasy bazowej, a ponadto realizujący przydział pamięci na nrIndeksu i kopiowanie łańcucha,
- destruktor który zwalnia przydzieloną pamięć,
- operator wyprowadzania danych do strumienia wyjściowego.
Na koniec zdefiniować funkcje main, w której tworzony jest przykładowy obiekt klasy Osoba i klasy Student, a następnie wyprowadzić informacje przechowywane w obiektach do standardowego strumienia wyjściowego.
Niestety mam sporo błędów, największe problemy mam z tym konstruktorem..:/ prosiłbym o poprawki i wskazówki:)
Kod: Zaznacz cały
#include<iostream>
using namespace std;
class Osoba
{
public:
Osoba(char* Imie, char* Nazwisko, char* Pesel);
~Osoba();
friend ostream& operator<< (ostream& wy, const Osoba& osoba);
protected: // nie może być private, bo nie ma dostępu:/
char* Imie;
char* Nazwisko;
char* Pesel;
};
Osoba::Osoba(char* I, char* N, char* P)
{
Imie = new char[strlen(I)+1];
for (int i=0; i<strlen(I)+1; i++)
Imie[i] = I[i];
Nazwisko = new char[strlen(N)+1];
for (int i=0; i<strlen(N)+1; i++)
Nazwisko[i] = N[i];
Pesel = new char[strlen(P)+1];
for (int i=0; i<strlen(P)+1; i++)
Pesel[i] = P[i];
}
Osoba::~Osoba()
{
delete[] Imie;
delete[] Nazwisko;
delete[] Pesel;
}
ostream & operator<< (ostream& wy, const Osoba& osoba)
{
wy << osoba.Imie << " " << osoba.Nazwisko << " " << osoba.Pesel;
return wy;
}
class Student : public Osoba
{
private:
char* nrIndeksu;
public:
Student(char* Imie, char* Nazwisko, char* Pesel, char* nrIndeksu);
~Student()
{
delete[] nrIndeksu;
}
friend ostream& operator<< (ostream& wy, const Student& student);
};
Student::Student(char* I, char* N, char* P, char* nI): Osoba(I,N,P)
{
nrIndeksu = new char[strlen(nI)+1];
for (int i=0; i<strlen(nI)+1; i++)
nrIndeksu[i] = nI[i];
}
ostream & operator<< (ostream& wy, const Student& student)
{
wy << student.Imie << " " << student.Nazwisko << " " << student.Pesel << " " << student.nrIndeksu;
return wy;
}
int main()
{
Osoba OSOBA1("TOMEK","NOWAK","0987654321");
cout<<OSOBA1<<endl;
Student STUDENT1("TOMEK2","NOWAK2","7654321","78000");
cout<<STUDENT1<<endl;
system("pause");
return EXIT_SUCCESS;
}
Poprawiony:))