You are on page 1of 16

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Аудиториски вежби 6

Наследување
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Задача 1
Да се дефинира класа за репрезентација на тениски играч. За секој
тениски играч треба да се чуваат името, презимето како и тоа дали
игра во лига (bool).

Од класата тениски играч да се изведе класа за рангиран тениски


играч, која ќе репрезентира играч кој игра на меѓународно ниво. За
рангираните тениски играчи дополнително треба да се чува и
рангот на тенискиот играч.

Објектно – ориентирано програмирање


ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

#include <iostream>
#include <cstring>
using namespace std;
class TenisIgrac
{
private:
enum { MAX = 20};
char ime[MAX];
char prezime[MAX];
bool Igra_vo_Liga;
public:
TenisIgrac (const char * i = "“,const char * p = "", bool ht = false);
void pecati() const;
bool IgraVoLiga() const
{
return Igra_vo_Liga;
}
void ResetLiga(bool v)
{
Igra_vo_Liga = v;
}
};

Објектно – ориентирано програмирање


ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

// primer za javno izvedena klasa

class RangiranIgrac : public TenisIgrac


{
private:
unsigned int rang;
public:
RangiranIgrac ( unsigned int r = 0, const char * i = "",
const char * p = "", bool ht = false);
RangiranIgrac ( unsigned int r, const TenisIgrac & tp );

unsigned int Rangiranje()


{
return rang;
}
void ResetRang (unsigned int r )
{
rang = r;
}
};

Објектно – ориентирано програмирање


ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

// методи на класата TenisIgrac


TenisIgrac::TenisIgrac ( const char * i, const char * p, bool ht )
{
strncpy(ime, i, MAX - 1);
ime[MAX - 1] = '\0';
strncpy(prezime, p, MAX - 1);
prezime[MAX - 1] = '\0';
Igra_vo_Liga = ht;
}
void TenisIgrac::pecati() const
{
cout << prezime << ", " << ime;
}
// методи на класата RangiranIgrac
RangiranIgrac::RangiranIgrac ( unsigned int r, const char * i,
const char * p, bool ht ) : TenisIgrac( i, p, ht )
{
rang = r;
}
RangiranIgrac::RangiranIgrac ( unsigned int r, const TenisIgrac & tp )
: TenisIgrac(tp), rang(r)
{}

Објектно – ориентирано програмирање


ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

int main () {
TenisIgrac Igrac1("Tara", "Boomdea", false);
RangiranIgrac rIgrac1(1140, "Mallory", "Duck", true);
rIgrac1.pecati();
// objekt od izvedena klasa koristi metod od osnovnata
if ( rIgrac1.IgraVoLiga() )
cout << ": pripagja na liga.\n";
else
cout << ": ne pripagja na liga.\n";
Igrac1.pecati ();
// objekt od osnovnata klasa koristi metod od osnovnata
if ( Igrac1.IgraVoLiga())
cout << ": pripagja na liga ";
else
cout << ": ne pripagja na liga.\n";
cout << "Ime: ";
rIgrac1.pecati();
cout << "; Rang: " << rIgrac1.Rangiranje() << endl;
RangiranIgrac rIgrac2( 1212, Igrac1 );
cout << "Ime: ";
rIgrac2.pecati();
cout << "; Rating: " << rIgrac2.Rangiranje() << endl;
return 0;
} Објектно – ориентирано програмирање
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Излез од програмата
Duck, Mallory: pripagja na liga.
Boomdea, Tara: ne pripagja na liga.
Ime: Duck, Mallory; Rang: 1140
Ime: Boomdea, Tara; Rating: 1212

Објектно – ориентирано програмирање


ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Задача 2
Да се дефинира класа Smetka за работа со банкарска сметка. За
секоја банкарска сметка треба да се чува име и презиме на
корисникот (низа од макс. 35 знаци), број на сметка (long) и
моментално салдо (double). Да се овозможат методи за преглед на
сметката, депонирање и подигнување на пари од сметката.

Потоа да се дефинира класа SmetkaPlus, што ќе овозможува


корисникот на сметката да зема заем од банката. Треба да се
овозможи механизам за пресметување на камата доколку
корисникот должи пари на банката.

Објектно – ориентирано програмирање


ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

#include <iostream>
#include <cstring>
using namespace std;
// Osnovna klasa - Smetka
class Smetka
{
private:
enum { MAX = 35};
char imeprezime[MAX];
long smetkaBroj;
double saldo;

public:
Smetka ( const char *ip = "", long sb = -1,
double bal = 0.0 );
void Deposit ( double suma );
void Podiganje ( double suma );
double Saldo() const;
void Pregled() const;
~Smetka() {}
};

Објектно – ориентирано програмирање


ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

//Izvedena klasa - SmetkaPlus


class SmetkaPlus : public Smetka
{
private:
double maxZaem, kamata, Dolzi;
public:
SmetkaPlus( const char *s = "", long sb = -1,
double bal = 0.0, double mz = 500,
double r = 0.10 );
SmetkaPlus( const Smetka & ba, double mz = 500, double r = 0.1 );
void Pregled () const;
void Podiganje ( double suma );
void ResetMax ( double m ) {
maxZaem = m;
}
void ResetKamata ( double r ) {
kamata = r;
}
void ResetDolzi () {
Dolzi = 0;
}
};

Објектно – ориентирано програмирање


ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

// metodi za Smetka
Smetka::Smetka( const char *s, long sb, double bal)
{
strncpy(imeprezime, s, MAX - 1);
imeprezime[MAX - 1] = '\0';
smetkaBroj = sb;
saldo = bal;
}
void Smetka::Deposit( double suma)
{
if (suma < 0)
cout << " Negativno saldo ne e dozvoleno; "
<< "depositot e storniran.\ n";
else
saldo += suma;
}

Објектно – ориентирано програмирање


ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

void Smetka::Podiganje( double suma )


{
if ( suma < 0 )
cout << "Negativno saldo ne e dozvoleno; "
<< "Podiganje na sumata ne e mozna.\n";
else if ( suma <= saldo )
saldo -= suma;
else
cout << "Podiganje na suma od" << suma
<< " den go nadminuva vaseto saldo.\n"<<
"Podiganje na ovaa suma ne e mozno.\n";
}
double Smetka::Saldo() const
{
return saldo;
}
void Smetka::Pregled() const
{
cout << "Klient: " << imeprezime << endl;
cout << “Broj na smetka: " << smetkaBroj << endl;
cout << "Saldo: " << saldo << endl;
}

Објектно – ориентирано програмирање


ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

// metodi na SmetkaPlus
SmetkaPlus::SmetkaPlus( const char *s, long sb, double bal, double mz,
double r ) : Smetka ( s, sb, bal ) // повик на конструктор од Smetka
{
maxZaem = mz;
Dolzi = 0.0;
kamata = r;
}
SmetkaPlus::SmetkaPlus ( const Smetka & ba, double mz , double r )
: Smetka ( ba ) // имплицитно се користи копирачки конструктор
{
maxZaem = mz;
Dolzi = 0.0;
kamata = r;
}
// redefiniranje na Pregled()
void SmetkaPlus::Pregled() const
{
Smetka::Pregled(); // повик на функцијата Pregled() од основната класа
cout << "Maximalen zaem" << maxZaem << endl;
cout << "Dolzi na bankata" << Dolzi << endl;
cout << "Kamata: " << 100 * kamata << "%\ n";
}

Објектно – ориентирано програмирање


ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

// redefiniranje na Podiganje()
void SmetkaPlus::Podiganje( double suma)
{
double bal = Saldo();
if (suma <= bal)
Smetka::Podiganje(suma);
else if ( suma <= bal + maxZaem - Dolzi)
{
double advance = suma - bal;
Dolzi += advance * (1.0 + kamata);

cout << "Dolg kon bankata: " << advance << endl;
cout << "Dolg so kamata: " << advance * kamata << endl;

Deposit(advance);
Smetka::Podiganje(suma);
}
else
cout << "Limitot za kredit e nadminat. Stornirana transakcija.\ n";
}

Објектно – ориентирано програмирање


ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

int main()
{
Smetka Petko ("Petko Petkovski", 381299, 4000 );
SmetkaPlus Trpe ("Trpe Trpevski", 382288, 3000 , 500 , 0.1 );

Petko.Pregled();
cout << endl;
Trpe.Pregled();
cout << endl;
cout << "Deposit od 1000 den na smetkata na Trpe:\ n";

Trpe.Deposit (1000);
cout << "Novo saldo: " << Trpe.Saldo() << endl;
cout << "Podiganje na 4200 den od smetkata na Petko:\ n";

Petko.Podiganje (4200);
cout << "Saldoto na Petko e: " << Petko.Saldo() << endl;
cout << "Podiganje na 4200 den od smetkata na Trpe:\ n";

Trpe.Podiganje( 4200 );
Trpe.Pregled();
return 0;
}

Објектно – ориентирано програмирање


ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Излез од програмата:
….
Broj na smetka: 382288
Saldo: 3000
Maximalen zaem: 500
Dolzi na bankata: 0
Kamata: 10%

Deposit od 1000 den na smetkata na Trpe:


Novo saldo: 4000
Podiganje na 4200 den od smetkata na Petko:
Podiganje na suma od 4200 den go nadminuva vaseto saldo.
Podiganje na ovaa suma ne e mozno.
Saldoto na Petko e: 4000
Podiganje na 4200 den od smetkata na Trpe:
Dolg kon bankata: 200
Dolg so kamata: 20
Klient: Trpe Trpevski
Broj na smetka: 382288
Saldo: 0
Maximalen zaem: 500
Dolzi na bankata: 220
Kamata: 10%

Објектно – ориентирано програмирање

You might also like

  • Strukturno
    Strukturno
    Document11 pages
    Strukturno
    BojanBokiStojilovski
    No ratings yet
  • д
    д
    Document3 pages
    д
    BojanBokiStojilovski
    No ratings yet
  • буббу
    буббу
    Document36 pages
    буббу
    BojanBokiStojilovski
    No ratings yet
  • Oop Av5
    Oop Av5
    Document26 pages
    Oop Av5
    BojanBokiStojilovski
    No ratings yet
  • Oop Av7
    Oop Av7
    Document26 pages
    Oop Av7
    BojanBokiStojilovski
    No ratings yet
  • Funkcii
    Funkcii
    Document29 pages
    Funkcii
    BojanBokiStojilovski
    No ratings yet
  • PPPP
    PPPP
    Document42 pages
    PPPP
    BojanBokiStojilovski
    No ratings yet
  • Калкулус Содржина
    Калкулус Содржина
    Document1 page
    Калкулус Содржина
    BojanBokiStojilovski
    No ratings yet