Dzień dobry,
Po prostu przekopiuje treść zad. i to co zrobiłem, będzie szybciej i efektywniej, niż sam zacznę się rozpisywać o co mi chodzi.
(...)a) program powinien umozliwic:
- wczytywanie informacji o osobach zwiazanych z uniwersytetem z rozroznieniem
kategorii osoby (student, pracownik); wczytywane powinny byc dane wspolne dla
wszystkich osob (nazwisko plec) oraz dane specyficzne dla kategorii (pensja dla
pracownika; stypendium, rok studiow dla studenta); informacje o osobach przechowywac
w tablicy o zunifikowanym typie.(...)
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include "Osoba.h"
#include "Student.h"
#include "Pracownik.h"
using namespace std;
int main()
{
char imie[40],nazwisko[40];
char sw;
int io,rokSt,st,ps,rokU;
cout<<"Podaj ilosc osob ktore chcesz wprowadzic: ";
cin>>io;
Osoba *tab = new Osoba[io];
for(int i=0; i<io; ++i)
{
cout<<"Podaj imie: ";
cin.getline(imie,40);
cout<<"Podaj nazwisko: ";
cin.getline(nazwisko,40);
cout<<"Podaj rok urodzenia: ";
cin>>rokU;
cout<<"Podaj osobe: s-student,p-pracownik: ";
cin>>sw;
switch(sw)
{
case 's': cout<<"Podaj rok studiow: ";
cin>>rokSt;
cout<<"Podaj stypendium";
cin>>st;
tab[i] = Student(st,rokSt,imie,nazwisko,rokU);
break;
case 'p': cout<<"Podaj pensje: ";
cin>>ps;
tab[i] = Pracownik(imie,nazwisko,rokU);
**Pracownik().ustalPensje(ps);**
break;
default : "bledny wybor program zakonczy dzialanie: ";exit(1);
}
}
delete[] tab;
system("PAUSE");
return 0;
}
Wszystko działa (przynajmniej kompiluje) moje pytanie dotyczy pogrubionej linii, bo rozumiem, że tab[i] to obiekt typu Osoba który wskazuje na klasę Pracownik, tak ? to dlaczego odwołując się do metody klasy podrzędnej (tutaj Pracownik) wywołuje ją w ten sposób jak wyżej, a nie tab[i].ustalPensje - o.k tab[i] jest typu Osoba a tam takowej funkcji nie ma, ale jak wywołam tak: Pracownik().ustalPensje() to co to w ogóle znaczy, przecież Pracownik to klasa nie obiekt, więc trochę się zagubiłem w tym miejscu jakby mógł ktoś mnie poprawić będę wdzięczny bo coś tu nie gra.
może jeszcze podam klase student, pracownik, osoba.
#include <string.h>
#pragma once
class Osoba
{
public:
void ustalImie(char* i) { strcpy(imie,i); }
void ustalNazwisko(char* n) { strcpy(nazwisko,n); }
void ustalRokUr(int r) { rokur=r; }
const char* podajImie() { return imie; }
const char* podajNazwisko() { return nazwisko; }
int podajRokUr() { return rokur; }
void ustalDane(char* i, char* n, int r);
Osoba() {};
Osoba(char* i, char* n, int r);
private:
char imie[40];
char nazwisko[40];
int rokur;
};
#include <string.h>
#include "Osoba.h"
class Student : public Osoba
{
private:
int stypendium;
int rokStudiow;
public:
void ustalRokSt(int nowyRs);
void ustalStypendium(int noweSt);
int podajStypendium();
double dochod();
Student(int s, int rs, char *imie, char *nazwisko, int rokUr) : Osoba(imie,nazwisko,rokUr)
{
this->stypendium=s;
this->rokStudiow=rs;
}
};
#include "Osoba.h"
#include <iostream>
using namespace std;
class Pracownik : public Osoba
{
private:
int pensja;
public:
void ustalPensje(int nowaPensja);
int podajPensje();
double podajPremie();
double dochod();
Pracownik::Pracownik(char *imie, char *nazwisko, int rokUr) : Osoba(imie,nazwisko,rokUr)
{}
Pracownik::Pracownik() {};
};