jeudi 3 mars 2016

C++ .hpp and .cpp files

I moved from C to C++ and I am a bit confused now. I am making two classes: Trieda and Ziak. First I created ziak.hpp, ziak.cpp and trieda.hpp, trieda.cpp and main.cpp but it was doing me some mess because I dont even know yet how to properly compile these files in Linux terminal.

So I make 3 files of these 5 and those are: main.cpp, ziak_trieda.hpp, ziak_trieda.cpp.

Here they are:

main.cpp:

#include <iostream>
#include <vector>

#include "ziak_trieda.hpp"



using namespace std;

int main(){
    vector<Ziak> ziaci;
    vector<Trieda> triedy;

    Trieda B4 = new Trieda( 4, 'B' );
    triedy.push_back( B4 );

    Ziak hala = new Ziak( "Hala", "Bala" );
    ziaci.push_back( hala );
    Ziak lala = new Ziak( "Lala", "Trala", B4 );
    ziaci.push_back( lala );


    return 0;
}

ziak_trieda.hpp:

#include <vector>


using namespace std;

class Trieda{
private:
    int cislo;
    char pismeno;
    vector<Ziak> ziaci;

public:
    Trieda( int, char );
    ~Trieda();

    void addZiak( Ziak & ziak );
    void removeZiak( Ziak & ziak );
    void printTrieda( Trieda trieda );
};


class Ziak{
private:    
    char meno[25];
    char priezvisko[25];
    Trieda trieda;

public:
    Ziak( char meno, char priezvisko );
    ~Ziak();

    void addTrieda( Ziak & menoZiaka, Trieda & nazovTriedy );
    void removeTrieda( Ziak & menoZiaka );

    void printInfo( Ziak & menoZiaka );
    void printTrieda( Ziak & menoZiaka );
};

ziak_trieda.cpp

#include <iostream>
#include "ziak_trieda.hpp"

using namespace std;

// ============================== class Trieda ==============================

// trieda Constructor
Trieda::Trieda( int cislo, int pismeno ){
    this -> cislo = cislo;
    this -> pismeno = pismeno;
}

// trieda Destructor
Trieda::~Trieda(){
    cout << "Odstranujem triedu " << this -> cislo << "." << this -> pismeno << endl;
}

// print Trieda
void Trieda::printTrieda( Trieda trieda ){
    cout << trieda . cislo << "." << trieda.pismeno << endl;
}


//============================== class Ziak ==============================

Ziak::Ziak( char meno[25], char priezvisko[25], Trieda trieda ){
    this -> meno                = meno;
    this -> priezvisko  = priezvisko;
    this -> trieda          = trieda;
}

Ziak::~Ziak(){
    cout << "Odstranujem ziaka " << this -> meno << " " << this -> priezvisko << endl;
}


// add Trieda
void Ziak::addTrieda( Ziak & ziak, Trieda trieda ){
    ziak . trieda           = trieda;
}


// remove Trieda
void Ziak::removeTrieda( Ziak & ziak ){
    ziak . trieda           = NULL;
}


// print Ziakova Trieda
void Ziak::printTrieda( Ziak & ziak ){
    cout << ziak . trieda . cislo << "." << ziak . trieda . pismeno << endl;
}

void Ziak::printInfo( Ziak & ziak ){
    cout << "Meno: " << ziak . meno << "\nPriezvisko: " << ziak . priezvisko << "\nTrieda: " <<
                    ziak . trieda . cislo << "." << ziak . trieda . pismeno << endl;
}

My questions:

1) How do I properly compile these files? I just put g++ main.cpp ziak_trieda.cpp

2) What to do when in I make class Trieda and in that class I am making vector and then I make class Ziak and in that class I am making variable of type Trieda. Any switch is not going to help because in Trieda I need Ziak and in Ziak I need Trieda.

By the way when I used g++ main.cpp ziak_trieda.cpp it put me maaaany errors and I dont even know what they are..

Aucun commentaire:

Enregistrer un commentaire