Strctura unui proiect C++

Structura unui proiect C++ este destul de simplă și comprehensivă. O structură bună ajută la înțelegerea funcționării proiectului, la modul în care fișierele, sau clasele, relaționează unele cu altele.

.cpp și .h

C++ prezintă două timpuri de fișiere mari și late, .h și .cpp. Primul dintre acestea este un fișier de tip header, iar al doilea este un fișier de tip sursă. Fișierele .h prezintă prin convenție declarațiile, în timp ce fișierele .cpp păstrează definițiile. O clasă va avea în mod normal un header și un source.

Un exemplu este: Player.h

#ifndef SRC_PLAYER_H__
#define SRC_PLAYER_H__

class Player {
public:
    Player();
    
    void HealByAmount(uint_32 amount);

private:
    uint32_t m_maxHealth;
    uint32_t m_health;
    static GameMode *s_GameMode;
};

#endif  // SRC_PLAYER_H__

Player.cpp

#include <Player.h>
#include <algorithm>

GameMode Player::s_GameMode = nullptr;

Player::Player() {
    m_health = m_maxHealth;
}

void Player::HealByAmount(uint_32 amount) {
    m_health += amount;
    m_health = std::clamp(m_health, 0, m_maxHealth);
}

File linking

Fișierele sunt mai întâi compilate și apoi linkate. Faptul ca acestea pot interacționa este asigurat de utilizarea #include, urmat de adresa fișierului. Acesta face practic o copie a întregului fișier în locația respectivă, de aceea folosirea lor nu trebuie abuzată.

Pot apărea cazuri în care includem un fișier care este deja inclus într-un fișier inclus. Pentru a evita asta există condiții de incluziune. Directiva #ifndef, urmată de un nume, verifică dacă există deja definirea tipului de date. Dacă aceasta nu există, este creat folosind directiva #define, urmată de un nume si de definire. Condiția se încheie folosind directiva #endif.

În exemplul dat, atunci cand dăm include la Player.h, directiva verifică dacă SRC_PLAYER_H__ există deja. Dacă nu, îl include. Dacă există, nu îl va rescrie. În acest mod se previne declararea dublă.

Crearea claselor în CLion

CLion oferă o interfață facilă pentru crearea de clase, headere sau surse.

5

Pentru a crea o clasă poți da click dreapta în ierarhia fișierelor, new, C++ class. Aici poți menționa numele clasei pe care vrei să o creezi.

6

Astfel vor fi create 2 fișiere: un header și un source, ambele avnând numele clasei. CLion le va inițializa default cu directive și cu definiția clasei, iar în fișierul sursă va include fișierul header.

Organizarea fișierelor

Este bine ca fișierele să fie organizate în foldere, în funcție de criterii prestabilite. Toate acestea ar trebui sa se afle într-un folder src, prin convenție în root.

7

Exerciții

  1. Restructurați tema începută la Cursul 4 astfel încât fiecare clasă a sa să aibă header și implementare.