Statické prvky a funkcie typu friend

Príklad 4.1 V príklade 3.2 dodefinujte počítadlo objektov. Zabezpečte správne počítanie vytvorených a zrušených objektov

#include <iostream>
using namespace std;

class Zlomok
{
private:
int citatel;
int menovatel;
public :
static int objectCount;
// Konstruktor
Zlomok( int cit, int men ){
cout << "Parametricky konstruktor Zlomok(" << cit << "," << men << ")" << endl;
this -> citatel = cit;
this -> menovatel = men;
cout << ++objectCount<<endl;
}
// Destruktor
~Zlomok(){
cout << "Destruktor zlomku " << citatel << "/" << menovatel << endl;
cout << --objectCount <<endl;
}

void vypis(){
cout << "***"<<this -> citatel << "/" << this -> menovatel << endl;
}
};
int Zlomok::objectCount=0;

int main()
{
cout << "Pocet existujucich objektov " << Zlomok::objectCount << endl;

Zlomok z1(1,2), z2(3,4);

}
















Príklad 4.2 V príklade 4.1 definujte ďalšiu triedu TriedaX, ktorej atribútom bude konštantný objekt z typu Zlomok . Vytvorte objekt triedy TriedaX a vypíšte hodnoty atribútu z.

#include <iostream>
using namespace std;

class Zlomok
{
private:
int citatel;
int menovatel;
static int objectCount;
protected:
public :
// Konstruktor
Zlomok( int cit, int men ){
cout << "Parametricky konstruktor Zlomok(" << cit << "," << men << ")" << endl;
this -> citatel = cit;
this -> menovatel = men;
cout << ++objectCount<<endl;
}
// Destruktor
~Zlomok(){
cout << "Destruktor zlomku " << citatel << "/" << menovatel << endl;
cout << --objectCount <<endl;
}

void vypis() const{
cout << "***"<<this -> citatel << "/" << this -> menovatel << endl;
}
};
int Zlomok::objectCount=0;

class TriedaX
{
public:
static const Zlomok z1; // staticky konstantny atribut - objekt z1
const Zlomok z2; // kostantny atribut - objekt z2 - vyzaduje inicializaciu
TriedaX():z2(3,4){} // v konstruktore
};

const Zlomok TriedaX::z1(1,2);

const Zlomok z3(5,6); // globalny objekt z3
int main()
{
TriedaX::z1.vypis();
TriedaX t;
t.z2.vypis();
z3.vypis();
}












Príklad 4.3 Definujte triedu melon s atribútom hmotnost, konštruktorom, deštruktorom a metódou display(), ktorá vypíše hmotnost objektu. Pri vytvorení objektu sa jeho váha pripočíta k total_hmotnost, čo je statický člen triedy melon. Zároveň sa inkrementuje ďalší statický člen total_pocet, ktorý udáva počet existujúcich melon objektov. Overte správnu funkčnosť navrhnutej triedy vo funkcii main().

#include <iostream>
#include <stdio.h>
using namespace std;
class melon {
private:
int hmotnost;
static int total_hmotnost;
static int total_pocet;
public:
melon(int s) {
hmotnost = s;
total_hmotnost +=s;
total_pocet ++;
}
~melon() {
total_hmotnost -= hmotnost;
total_pocet--;
}
void display() {
printf("Vaha dyne %d kg\n",hmotnost);
}
static void total_display()
{
printf("%d melons hmotnost %d kg\n", total_pocet,total_hmotnost);
}

};
// inicializácia statických členov
int melon::total_hmotnost = 0;
int melon::total_pocet = 0;
int main()
{
melon p1(15),p2(20),p3(12);
p1.display();
p2.display();
p3.display();

melon::total_display();
p1.total_display();
p1.display();

}


Príklad 4.4 Definujte triedy jablka a hrusky s atribútmi kupene a predane (hodnota v kg). Zistite celkový stav zásob na sklade (hodnota v kg pre všetky objekty jablka a hrusky). Problém riešte prostredníctvom friend funkcie na_sklade() s oboma triedami.
pozri prednášky

Príklad 4.5 Definujte triedy jablka a hrusky s atribútmi kupene a predane (hodnota v kg). Zistite celkový stav zásob na sklade ( hodnota v kg pre jablka a hrusky). Problém riešte prostredníctvom friend triedy hrusky v triede jablka a členskej metódy triedy hrusky na_ sklade().
pozri prednášky