[Archive — École 42] C++ Module 01

Mahaut Latinis
2 min readOct 10, 2023

--

💡 Dans son Module 01 en C++, l’école 42 présente de nouvelles notions:

  1. New et delete
  2. Références
  3. Filestreams (input filestreams, output filestreams)

Celles-ci ne sont spécifiques à l’orienté objet, mais sont particulièrement importantes à maîtriser pour réaliser tout projet en C++.

New et delete

https://cdn.intra.42.fr/video/video/115/piscine_c___-_d01_-_00_new_and_delete.mp4

En C, malloc et free sont utilisés pour allouer et libérer de la mémoire dynamiquement. En C++, il nous faut utiliser new et delete car ceux-ci feront appel (respectivement) au constructeur et destructeur.

Exemple :

#include <iostream>
#include <string>

class Student
{
private:
std::string _login;
public:
Student(std::string login): _login(login) { return ;}
~Student(void) { return ;}
}

int main(void)
{
// Allocation sur la pile (stack) (allocation statique)
Student bob = Student("bob");
// Allocation sur la heap (dynamique)
Student *jim = new Student("jim");
delete jim;
return (0);
}

Exemple d’allocation de tableau :

#include <iostream>
#include <string>

class Student
{
private:
std::string _login;
public:
Student(void): _login("default") { return ;}
~Student(void) { return ;}
}

int main(void)
{
//L'opérateur new [] ne prend pas de paramètre, il faut donc un constructeur sans paramètre
Students *students = new Student[42];
delete [] students;
return (0);
}

Références

https://cdn.intra.42.fr/video/video/116/piscine_c___-_d01_-_01_reference.mp4

Une référence est un pointeur qui est :

  1. constant
  2. toujours déréférencé
  3. jamais null
#include <iostream>

int main(void)
{
int numberOfBalls = 42;

//pointeur
int *ballsPtr = &numberOfBalls;
//référence
int &baffsRef = numberOfBalls;

// int &balls2Ref; IMPOSSIBLE

ballsRef = 84;
return (0);
}
//Exemple de retour par référence vs par pointeur
std::string const &getLoginRefConst() const
{
return this->_login;
}

std::string *getLoginPtrConst(void) const
{
return &(this->_login);
}

Filestreams

https://cdn.intra.42.fr/video/video/114/piscine_c___-_d01_-_02_filestream.mp4

En plus des streams précédemment vus (std::cin, std::cout, std::cerr), il existe des streams pour interagir avec des fichiers (lecture, écriture).

#incude <iostream>
#include <fstream>

int main(void)
{
// input filestream
std::ifstream ifs("numbers");//ouverture du fichier numbers
unsigned int dst;
unsigned int dst2;
//lecture de deux ints (il est possible de lire de pleins de manières différentes)
ifs >> dst >> dst2;

ifs.close();

std::cout << dst << " " << dst2 << std::endl;

// output filestream
std::ofstream ofs("test.out");
// Ecriture dans le fichier
ofs << "i like ponies" << std::endl;
ofs.close();
}

//IL existe également des strings streams qui peuvent être très utiles pour générer des messages sur une sortie de logs par exemple.

--

--

Mahaut Latinis
Mahaut Latinis

No responses yet