03 - Odvojena definicija klase
Odvojena definicija klase
  • Definicija klase u .h fajlu
  • Implementacija i upotreba klase
03
Definicija klase u .h fajlu
Odvajanjem definicije klase u fajl zaglavlja veličina glavnog programa se smanjuje i klasa postaje modularna pa se može koristiti unutar bilo kojeg programa pomoću #include direktive

C++ vam dozvoljava da odvojite definiciju klase od njene implementacije

Stoga, većina programera piše deklaracije klasa odvojeno u header fajlu. Ovaj fajl, obično, ima isto ime kao i fajl sa implementacijom ali ima ekstenziju.h (ili .hpp ) dok glavni fajl ima ekstenziju .cpp.

Pretpostavimo da imamo klasu za Trougao. Nju ćemo da definišemo u fajlu Trougao.h .

class Trougao {
public:
    double s1, s2, a12;
    Trougao (double, double, double);

    double visina(); 
    double povrs (); 
    double strana3();
private:
    double ugao13(); 
    double ugao23();
};

Fajl zaglavlja (header file) koji sadrži deklaraciju klase se može zatim uključiti korišćenjem jedne #include pretprocesorske direktive. (npr. #include “Trougao.h”).

Odvajanjem deklaracije klase na ovaj način, veličina glavnog programa se smanjuje i klasa postaje modularna pa se može koristiti unutar bilo kojeg programa, jednostavno pomoću dodavanja #include direktive.

Implementacija i upotreba klase
Podaci članovi klase su automatski u području važenja funkcija članova klase. Stoga podatke članove nije potrebno navoditi kao parametre ili kao povratne vrednosti funkcija članova

Definicija klase će biti smeštena u zasebnom fajlu triangle.cpp :

#include "triangle.h"
#include "math.h"

#define PI 3.14

//KONSTRUKTOR:
Trougao::Trougao (double str1, double str2, double ugao12)
{ // duza strana je s1
    if (str1 > str2) 
    {
        s1 = str1; 
        s2 = str2;
    } 
    else 
    { 
        s1 = str2; 
        s2 = str1;
    }
    if (ugao12 < 0) 
        ugao12 = -1 * ugao12;
    // a12 u stepenima, konvertovano u radijane
    a12 = ugao12 * PI / 180;
}

//OSTALE FUNKCIJE CLANOVI:
double Trougao::visina()
{
    return s2 * sin(a12);
}

double Trougao::povrs()
{ 
    return 0.5 * s1 * visina();
}

double Trougao::strana3()
{ 
    return 0.5 * s1 * visina();
}

Iako je konstruktor klase definisan u zasebnom fajlu triangle.cpp , pristup podacima te iste klase se vrši samo navođenjem podataka članova (npr. s1 i s2), čime se direktno vrši izmena stvarnih podataka kreiranog objekta.

Ostaje nam da napišemo glavni pokretački program, i njega ćemo smestiti u fajlu main.cpp :

#include <iostream>
#include "triangle.h"
using namespace std;

int main()
{
    double side1, side2, a12;
    cout << "Unesi duzine 2 strane \n";
    cin >> side1;
    cin >> side2;
    cout << "Ugao izmedju njih (degrees)\n";
    cin >> a12;

    Trougao my_tro(side1, side2, a12);
    cout << "duzina 3. strane " << 
        my_tro.strana3() << endl;
    cout << "povrsina " << my_tro.povrs() << endl;
}

Napravite projekat sa ova tri fajla i probajte da ga iskompajlirate.