Pfikusny Poziom 17

Joined: 09 Sep 2003 Posts: 391
|
#1
06 Dec 2005 14:31 Prosty programik c++ - sprawdzil by mi ktos...? |
|
|
|
W ramach zajec z programowania mam zawsze do napisania jakis prosty przykladowy programik...
Sek w tym, ze najczesciej ucze sie w trakcie pisania tego programu wiec obawiam sie, ze w kodzie moglem popelnic jakies bledy - a jest on sprawdzany i oceniany... zalezaloby mi na tym by bylo w nim jak najmniej bledow zebym dostal troszke punkotow....
Jesli ktos bylby tak dobry i rzucil okiem...
| Code: |
// labPK4.cpp : Defines the entry point for the console application.
//
/////////////////////////////////////////////////////////////////////
/* Zadanie 4 ////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
Temat zadania:
Zaimplementowac strukture klas (wymagane jest dziedziczenie)
dla systemu ewidencji uczniow i pracownikow szkoly podstawowej.
Informacje przechowywane o uczniach:
- imie i nazwisko
- klasa
- srednia ocen
Informacje przechowywane o nauczycielach:
- imie i nazwisko
- staz
- PESEL
Dla kazdej zaproponowanej klasy prosze zaimplementowac nastepujace funkcje:
- konstruktos domyslny
- konstruktor kopiujacy
- konstruktos z parametrami
- metode wypisujaca wszystkie dane
- operator >> i <<
ROZWIAZANIE:
Stworzone zostaly 3 klasy.
1. Bazowa - osoba - po ktorej beda dziedziczone "imie i nazwisko"
2. Pochodna od osoba - uczen
3. Pochodna od osoba - nauczyciel
*/
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//#include "stdafx.h"
#include <iostream.h>
//klasa osoba, po ktorej kolejne klasy beda dziedziczyc
class osoba
{
public:
char* imie;//[20]; // imie max dlugosci 19 znakow
char* nazwisko;//[30]; // nazwisko max dlugosci 29 znakow
// konstruktor domyslny
osoba()
{
imie = new char[20];
nazwisko = new char[30];
cout<<"Stworzono osobe\n";
}
//destruktor
~osoba()
{
delete[] imie;
delete[] nazwisko;
}
//konstruktor kopiujacy
osoba(const osoba &c):
imie(c.imie), nazwisko(c.nazwisko)
{
cout << "Konstruktor klonowania" << endl;
}
//konstruktor z parametrami
osoba(char* im, char* nazw)
{
imie=im;
nazwisko=nazw;
cout<<"Stworzono osobe: "<<imie <<nazwisko<<endl;
}
//metoda wypisujaca wszystkie dane
void osoba::Wypisz()
{
cout<<"imie: "<<imie<<" Nazwisko: "<<nazwisko<<endl;
}
//operator <<
friend ostream& operator<<(ostream& os, osoba &ob)
{
os << ob.imie<<ob.nazwisko << endl;
return os;
};
// operator >>
friend istream& operator>>(istream& is, osoba &ob)
{
is >> ob.imie >> ob.nazwisko;
return is;
}
};
//klasa uczen dziedziczaca po osobie
class uczen : public osoba
{
public:
short int klasa; //do "osoba" dodajemy klase
float srednia_ocen; // i srednia ocen
// konstruktor domyslny
uczen():
osoba(),klasa(0), srednia_ocen(0)
{
cout<<"Stworzono ucznia\n";
}
//konstryktor kopiujacy
uczen(const uczen &c):
osoba(c), klasa(c.klasa), srednia_ocen(c.srednia_ocen)
{
cout << "Konstruktor klonowania ucznia" << endl;
}
//konstruktor z parametrami
uczen(short int _klasa, float _srednia_ocen):
osoba(imie, nazwisko), klasa(_klasa), srednia_ocen(_srednia_ocen)
{
cout<<"konstruktor z parametrami"<<endl;
}
//metoda wypisujaca dane na ekran
void uczen::wypisz()
{
osoba::Wypisz();
cout << "Klasa: "<<klasa<<endl;
cout << "Srednia ocen: "<< srednia_ocen<<endl;
}
/////////////////////////////////////////////////////////
////////////// OPERATORY ////////////////////////////////
////////////////////////////////////////////////////////
//operator <<
friend ostream& operator<<(ostream& os, uczen &ob)
{
os << ob.imie<< " "<<ob.nazwisko<< " "<<ob.klasa<<" "<<ob.srednia_ocen << endl;
return os;
};
// operator >>
friend istream& operator>>(istream& is, uczen &ob)
{
is >> ob.imie >> ob.nazwisko>>ob.klasa>>ob.srednia_ocen;
return is;
}
///////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
};
// klasa nauczyciel dziedziczaca po osobie
class nauczyciel : public osoba
{
public:
short int staz; // przy nauczycielu mamy dodatkowo staz
long int PESEL; // i pesel
//konstruktor bezargumentowy
nauczyciel():
osoba(), staz(0), PESEL(0)
{
cout<<"Stworzono nauczyciela\n";
}
//konstruktor kopiujacy
nauczyciel(const nauczyciel &c):
osoba(c), staz(c.staz), PESEL(c.PESEL)
{
cout << "Konstruktor klonowania nauczyciela" << endl;
}
//konstruktor z parametrami
nauczyciel(short int _staz, long int _PESEL):
osoba(imie, nazwisko), staz(_staz), PESEL(_PESEL)
{
cout<<"konstruktor z parametrami"<<endl;
}
// metoda wypisujaca dane na ekran
void nauczyciel::wypisz()
{
osoba::Wypisz();
cout << "Staz: "<<staz<<endl;
cout << "PESEL: "<< PESEL<<endl;
}
////////////////////////////////////////////////////////
////////////// OPERATORY ////////////////////////////////
////////////////////////////////////////////////////////
//operator <<
friend ostream& operator<<(ostream& os, nauczyciel &ob)
{
os << ob.imie<< " "<<ob.nazwisko<< " "<<ob.PESEL<<" "<<ob.staz << endl;
return os;
};
// operator >>
friend istream& operator>>(istream& is, nauczyciel &ob)
{
is >> ob.imie >> ob.nazwisko>>ob.PESEL>>ob.staz;
return is;
}
};
int main(int argc, char* argv[])
{
return 0;
}
//---------------------------------------------------------------------------
|
|
|
Bielsky Poziom 16

Joined: 03 Sep 2003 Posts: 315 Location: Bielsko-Biała / Warszawa / Wrocław
|
#2
06 Dec 2005 17:37 Prosty programik c++ - sprawdzil by mi ktos...? |
|
|
|
Gdybyś w funkcji main wrzucił po przykładzie użycia każdej z klas/funkcji - praktycznie nie byłoby co sprawdzać.
Program kompiluje się, obiekty klas da się utworzyć, na pierwszy rzut oka nie widzę większych błędów.
Jedna rzecz: nie wiem, jak podchodzą do tego Twoi wykładowcy - wszystkie funkcje klasy definiujesz w obrębie deklaracji klasy. Rezultat jest taki, że są tworzone przez kompilator jako funkcjie inline. I raczej nie jest to w dobrym stylu.
Nowsze kompilatory wolą, gdy zamiast:
#include <iostream.h>
pisać:
#include <iostream>
using namespace std;
(zmień tak, jeżeli wyskakuje Ci backward warning)
|
|