Nie jestem pewien czy dobrze to ująłem ;] Mam nadzieję że zrozumiecie…jeżeli pokażę calutki listning programu i kod sprawdzający w main do którego nie wiem jak się zabrać… bo jak nie próbuję to nic z tego nie wychodzi…
więc całe zadanie brzmi tak:
Utworzyc prosta hierarchie klas – klase bazowa osoba oraz klasy pochodne student
i słuchacz (wolny słuchacz). Klasa osoba powinna zawierac pola pozwalajace na
zapisywanie nazwiska osoby (u yc typu string*) oraz liczby lat. Klasa student powinna
posiadac dodatkowo pola kier - (kierunek studiów) oraz nr (numer indeksu), natomiast
słuchacz pola kier i sred ( srednia ocen na swiadectwie maturalnym).
We wszystkich klasach zdefiniowac metody pozwalajace na korzystanie z wartosci pól
składowych klasy. Ponadto zdefiniowac metode pokaz(), której u ycie pozwoli wyswietlac
wartosci wszystkich pól składowych klasy.
Mnie z kodu sprawdząjacego nie wychodzi ta linijka ponieważ nie potrafię zrobić metody w klasie pochodnej która będzie wyswietlać również dane publiczne z klasy nadrzędnej.
cout << tab[4]->numer1()<< endl;
Cały kod programu:
#include
#include
using namespace std;
class osoba
{
public:
string *nazwisko;
int wiek;
osoba(string naz = "", int w = 0):nazwisko(new string(naz)),wiek(w){};
osoba(const osoba &obiekt):nazwisko(new string(*obiekt.nazwisko)),wiek(obiekt.wiek){}
~osoba(){delete nazwisko,wiek;};
ostream& pokaz (ostream & )const;
osoba &operator=(const osoba &obiekt);
string nazwisko1(){return (*nazwisko);}
int wiek1(){return (wiek);}
};
ostream& osoba::pokaz (ostream & out)const
{
return out <<"Nazwisko: "<< nazwisko <<" Wiek : "<
}
ostream& operator<<(ostream &out,const osoba& obiekt )
{
return out <<"Nazwisko: "<< *obiekt.nazwisko <<" Wiek : "<
}
class student : public osoba
{
string *kier;
int nr;
public:
student(string naz="",int w=0,string k="",int n=0):osoba(naz,w),kier(new string(k)),nr(n){}
student (const student & obiekt):osoba(obiekt){kier = obiekt.kier; nr=obiekt.nr; }
~student(){}
ostream& pokaz (ostream &);
student &operator=(const student &obiekt);
friend ostream& operator<<(ostream & ekran, const student & obj);
int numer1(){return (nr);}
};
class sluchacz : public osoba
{public:
string *kier;
double sr;
sluchacz(string naz="",int w=0,string k="", double s=0):osoba(naz,w),kier(new string(k)),sr(s){}
sluchacz(const sluchacz &obiekt):osoba(obiekt){kier=obiekt.kier, sr=obiekt.sr;}
sluchacz &operator=(const sluchacz &obiekt);
~sluchacz(){}
friend ostream& operator<<(ostream & ekran, const sluchacz & obj);
};
/ ******************************************************************************** /
osoba&osoba::operator=(const osoba &obiekt)
{ if (this==&obiekt) return *this;
*nazwisko=*obiekt.nazwisko;
wiek=obiekt.wiek;
return *this;
}
student & student::operator=(const student &obiekt){
(*this).osoba::operator=(obiekt);
kier=obiekt.kier;
nr=obiekt.nr;
}
sluchacz & sluchacz::operator=(const sluchacz &obiekt){
(*this).osoba::operator=(obiekt);
kier=obiekt.kier;
sr=obiekt.sr;
}
/ ******************************************************************************** /
/ ******************************************************************************** /
/ ******************************************************************************** /
ostream & operator <<(ostream &ekran, const student &obj)
{
ekran << obj.nazwisko
<< obj.wiek
<< obj.kier
<< obj.nr<
return ekran;
}
ostream& student::pokaz (ostream &out)
{
return out <<"kierunek : "<< *kier<
}
int main(){
osoba *tab[10];
osoba o1("Dolas", 21);
student o2("Dyzama", 22, "ekonomia", 15678);
sluchacz o3("Kania", 22, "budownictwo", 3.75);
osoba o4("Kos", 19);
student o5("Jelen", 18, "informatyka", 15700);
cout<< o3.nazwisko1()<<" " << o3.wiek1()<<" " << endl;
cout << o5.nazwisko1()<<" " << o5.numer1()<<" " << endl;
tab[0] = &o1;
tab[1] = &o2;
tab[2] = &o3;
tab[3] = new osoba;
tab[4] = new student;
cout<< tab[0]->nazwisko1() << endl;
//cout << tab[4]->numer1()<< endl;// TEGO NIE POTRAFIĘ ZROBIĆ
*tab[3] = o4;
*tab[4] = o5;
for (int i=0; i<5; ++i)
cout<< *tab[i] <
system ("pause");
return 0;
}