[Archive — École 42] C++ Module 01
💡 Dans son Module 01 en C++, l’école 42 présente de nouvelles notions:
- New et delete
- Références
- 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 :
- constant
- toujours déréférencé
- 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.