Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<math.h>
- #include<stdlib.h>
- #include<string.h>
- #include <typeinfo>
- class samochod {
- protected:
- double cena;
- char rodzaj_silnika[20];
- public:
- static int x;
- virtual void wyswietl_atrybuty() {
- printf("\n");
- printf("Cena wynosi:%g\n",cena);
- printf("Rodzaj silnika:%s.\n",rodzaj_silnika);
- };
- samochod *nast;
- samochod::samochod(){
- char rdz[20]="brak";
- cena=0;
- strcpy(rodzaj_silnika, rdz);
- nast=NULL;
- x=++x;
- }
- samochod::samochod(double a, char b[20]){
- cena=a;
- strcpy(rodzaj_silnika, b);
- nast=NULL;
- x=++x;
- }
- virtual~samochod(){
- if(nast!=NULL){
- x=--x;
- }
- }
- };
- class ciezarowy;
- class osobowy: public samochod{
- protected:
- double poj_bagaznika;
- int liczba_drzwi;
- char typ_sylwetki[20];
- public:
- friend ciezarowy;
- void ustal_atrybuty() {
- double cn;
- char rodzaj[20];
- double poj;
- int liczba;
- char typ[20];
- printf("Cena=");
- scanf("%lf",&cn);
- printf("Rodzaj silnika=");
- scanf("%s",&rodzaj);
- printf("Pojemnosc bagaznika=");
- scanf("%lf",&poj);
- printf("Liczba drzwi=");
- scanf("%d",&liczba);
- printf("Typ sylwetki=");
- scanf("%s",&typ);
- cena=cn;
- strcpy(rodzaj_silnika, rodzaj);
- poj_bagaznika=poj;
- liczba_drzwi=liczba;
- strcpy(typ_sylwetki, typ);
- };
- void wyswietl_atrybuty() {
- printf("\n");
- printf("Cena wynosi:%g\n",cena);
- printf("Rodzaj silnika:%s.\n",rodzaj_silnika);
- printf("Pojemnosc bagaznika:%g\n",poj_bagaznika);
- printf("Liczba drzwi:%d\n",liczba_drzwi);
- printf("Typ sylwetki:%s\n",typ_sylwetki);
- };
- osobowy operator+(osobowy drugi){
- osobowy suma;
- suma.cena=cena+drugi.cena;
- suma.poj_bagaznika=poj_bagaznika+drugi.poj_bagaznika;
- suma.liczba_drzwi=liczba_drzwi+drugi.liczba_drzwi;
- return suma;
- };
- osobowy& operator+=(const osobowy& rv){
- cena+=rv.cena;
- poj_bagaznika+=rv.poj_bagaznika;
- liczba_drzwi+=rv.liczba_drzwi;
- return *this;
- };
- const osobowy operator=(const osobowy& rv){
- cena=rv.cena;
- poj_bagaznika=rv.poj_bagaznika;
- liczba_drzwi=rv.liczba_drzwi;
- return *this;
- };
- osobowy::osobowy(){
- samochod::samochod();
- char tp[20]="brak";
- poj_bagaznika=0;
- liczba_drzwi=3;
- strcpy(typ_sylwetki, tp);
- nast=NULL;
- }
- osobowy(double a, char b[20], double c, int d, char e[20]):samochod(a,b){
- poj_bagaznika=c;
- liczba_drzwi=d;
- strcpy(typ_sylwetki, e);
- wyswietl_atrybuty();
- nast=NULL;
- }
- osobowy(const ciezarowy& rv);
- ~osobowy(){
- if(nast!=NULL){
- x=--x;
- printf("Typ obiektu:%s\n","osobowy");
- printf("Pole statyczne: %d\n",x);
- delete nast;
- }
- }
- };
- class ciezarowy: public samochod{
- protected:
- double max_ladownosc;
- int liczba_kol;
- public:
- friend osobowy;
- void ustal_atrybuty() {
- double cn;
- char rodzaj[20];
- double ladownosc;
- int kola;
- printf("Cena=");
- scanf("%lf",&cn);
- printf("Rodzaj silnika=");
- scanf("%s",&rodzaj);
- printf("Maksymalna ladownosc=");
- scanf("%lf",&ladownosc);
- printf("Liczba kol=");
- scanf("%d",&kola);
- cena=cn;
- strcpy(rodzaj_silnika, rodzaj);
- max_ladownosc=ladownosc;
- liczba_kol=kola;
- };
- void wyswietl_atrybuty() {
- printf("\n");
- printf("Cena wynosi:%g\n",cena);
- printf("Rodzaj silnika:%s.\n",rodzaj_silnika);
- printf("Maksymalna ladownosc:%g.\n",max_ladownosc);
- printf("Liczba kol:%d.\n",liczba_kol);
- }
- ciezarowy operator+(ciezarowy drugi){
- ciezarowy suma;
- suma.cena=cena+drugi.cena;
- suma.max_ladownosc=max_ladownosc+drugi.max_ladownosc;
- suma.liczba_kol=liczba_kol+drugi.liczba_kol;
- return suma;
- };
- const ciezarowy operator=(const ciezarowy& rv){
- cena=rv.cena;
- max_ladownosc=rv.max_ladownosc;
- liczba_kol=rv.liczba_kol;
- return *this;
- };
- const ciezarowy operator+=(const ciezarowy& rv){
- cena+=rv.cena;
- max_ladownosc+=rv.max_ladownosc;
- liczba_kol+=rv.liczba_kol;
- return *this;
- };
- ciezarowy::ciezarowy(){
- samochod::samochod();
- max_ladownosc=0;
- liczba_kol=4;
- nast=NULL;
- }
- ciezarowy(double a, char b[20], double c, int d):samochod(a,b){
- max_ladownosc=c;
- liczba_kol=d;
- wyswietl_atrybuty();
- nast=NULL;
- }
- ciezarowy(const osobowy& rv){
- cena=rv.cena;
- max_ladownosc=rv.poj_bagaznika;
- liczba_kol=rv.liczba_drzwi;
- }
- ~ciezarowy(){
- if(nast!=NULL){
- x=--x;
- printf("Typ obiektu:%s\n","ciezarowy");
- printf("Pole statyczne: %d\n",x);
- delete nast;
- }
- }
- };
- int samochod::x = 9;
- samochod *glowa=NULL;
- samochod *wsk=NULL;
- void fun_rozpoznajaca(samochod **wskaznik){
- if (typeid(*wsk) == typeid(osobowy))
- printf("Kolejny element jest typu osobowy.\n");
- else if (typeid(*wsk) == typeid(ciezarowy))
- printf("Kolejny element jest typu ciezarowy.\n");
- }
- osobowy::osobowy(const ciezarowy& rv){
- cena=rv.cena;
- poj_bagaznika=rv.max_ladownosc;
- liczba_drzwi=rv.liczba_kol;
- }
- int main() {
- printf("A1:\n");
- osobowy A1(132.0,"diesel",2.0,3,"hatchback");
- printf("A2:\n");
- osobowy A2(234.8,"benzyna",2.3,3,"combi");
- printf("A3:\n");
- osobowy A3(234.8,"benzyna",2.3,3,"combi");
- printf("B1:\n");
- ciezarowy B1(201.9, "benzyna", 34.7, 6);
- printf("B2:\n");
- ciezarowy B2(272.4, "ON", 45.7, 8);
- printf("B3:\n");
- ciezarowy B3(279.1, "ON", 60.7, 8);
- ciezarowy B4(A3);
- B4.wyswietl_atrybuty();
- osobowy A4(B3);
- A4.wyswietl_atrybuty();
- A2=A1+=B1;
- A2.wyswietl_atrybuty();
- B1=B2+=A1;
- B1.wyswietl_atrybuty();
- B2=B1=A1+A2;
- B2.wyswietl_atrybuty();
- A1=B1+A1+A2;
- A1.wyswietl_atrybuty();
- A3=A2+A1;
- A3.wyswietl_atrybuty();
- B3=A3;
- B3.wyswietl_atrybuty();
- B2=A3+B1+A1;
- B2.wyswietl_atrybuty();
- getchar();
- getchar();
- exit(0);
- return 0;
- };
Advertisement
Add Comment
Please, Sign In to add comment