1
0
mirror of https://github.com/adambard/learnxinyminutes-docs.git synced 2025-08-02 12:57:53 +02:00

small changes to #1854

This commit is contained in:
ven
2017-05-18 12:54:00 +02:00
committed by GitHub
parent eb44c5bc91
commit f5cb3924ef

View File

@@ -190,7 +190,7 @@ int main()
{ {
int monEntier; int monEntier;
// Imprime vers stdout (ou le terminal/l'écran) // Affiche sur stdout (ou le terminal/l'écran)
cout << "Entrez votre chiffre favori:\n"; cout << "Entrez votre chiffre favori:\n";
// Prend l'entrée clavier // Prend l'entrée clavier
cin >> monEntier; cin >> monEntier;
@@ -222,7 +222,7 @@ cout << maChaine + monAutreChaine; // Bonjour tout le monde !"
cout << maChaine + " toi !"; // "Bonjour toi !" cout << maChaine + " toi !"; // "Bonjour toi !"
// Les chaînes de caractères C++ sont mutables et ont des valeurs sémantiques. // Les chaînes de caractères C++ sont mutables.
maChaine.append(" le chien !"); maChaine.append(" le chien !");
cout << maChaine; // "Bonjour le chien !" cout << maChaine; // "Bonjour le chien !"
@@ -233,8 +233,8 @@ cout << maChaine; // "Bonjour le chien !"
// En plus des pointeurs comme ceux en C, // En plus des pointeurs comme ceux en C,
// C++ possède des _références_. // C++ possède des _références_.
// Ce sont des types de pointeurs qui ne peuvent pas être réassignés une fois // Ce sont des types de pointeurs qui ne peuvent pas être réassignés
// initialisés, et ne peuvent pas être nulles. // une fois initialisés, et ne peuvent pas être nulles.
// Ils partagent la même syntaxe que les variables elles-mêmes: // Ils partagent la même syntaxe que les variables elles-mêmes:
// les * ne sont pas nécessaires pour les déréférencer et // les * ne sont pas nécessaires pour les déréférencer et
// & (addresse de) n'est pas utilisé pour l'assignement. // & (addresse de) n'est pas utilisé pour l'assignement.
@@ -247,15 +247,15 @@ string bar = "Je suis bar";
string& fooRef = foo; // Ceci créé une référence à foo string& fooRef = foo; // Ceci créé une référence à foo
fooRef += ". Salut!"; // Modifie foo à travers la référence fooRef += ". Salut!"; // Modifie foo à travers la référence
cout << fooRef; // Imprime "Je suis foo. Salut!" cout << fooRef; // Affiche "Je suis foo. Salut!"
// Ne réassigne pas "fooRef". Ceci revient à faire "foo = bar", et // Ne réassigne pas "fooRef". Ceci revient à faire "foo = bar", et
// foo == "I am bar" // foo == "I am bar"
// après cette ligne. // après cette ligne.
cout << &fooRef << endl; // Imprime l'adresse de foo cout << &fooRef << endl; // Affiche l'adresse de foo
fooRef = bar; fooRef = bar;
cout << &fooRef << endl; // Imprime toujours l'adresse de foo cout << &fooRef << endl; // Affiche toujours l'adresse de foo
cout << fooRef; // Imprime "Je suis bar" cout << fooRef; // Affiche "Je suis bar"
// L'adresse de fooRef reste la même, c.-à-d. référence toujours foo. // L'adresse de fooRef reste la même, c.-à-d. référence toujours foo.
@@ -396,7 +396,6 @@ void EcrireTypeVoiturePrefereDansLeFichier(ETypesDeVoitures TypeVoitureEntree)
// Classes et programmation orientée objet // Classes et programmation orientée objet
/////////////////////////////////////////////////// ///////////////////////////////////////////////////
// Premier exemple de classes
#include <iostream> #include <iostream>
// Déclare une classe. // Déclare une classe.
@@ -424,7 +423,7 @@ public:
// Les fonctions qui ne modifient pas l'état de l'objet devraient être // Les fonctions qui ne modifient pas l'état de l'objet devraient être
// marquées en constantes avec const. // marquées en constantes avec const.
// Ceci vous permet de les appeler avec une référence constante de l'objet. // Ceci vous permet de les appeler avec une référence constante vers l'objet.
// Notez aussi que les fonctions devant être surchargées dans des classes // Notez aussi que les fonctions devant être surchargées dans des classes
// dérivées doivent être explicitement déclarées avec _virtual_. // dérivées doivent être explicitement déclarées avec _virtual_.
// Les fonctions ne sont pas virtuelles par défault pour des raisons de // Les fonctions ne sont pas virtuelles par défault pour des raisons de
@@ -445,7 +444,7 @@ public:
// classe de base ou d'un pointeur. // classe de base ou d'un pointeur.
virtual ~Chien(); virtual ~Chien();
}; // Un semicolon doit clôre la définition de la classe. }; // Un point virgule doit clôre la définition de la classe.
// Les fonctions membres de la classe sont habituellement implémentées dans des // Les fonctions membres de la classe sont habituellement implémentées dans des
// fichiers .cpp. // fichiers .cpp.
@@ -522,7 +521,7 @@ void ChienDomestique::imprimer() const
// Appelle la fonction "imprimer" dans la classe de base Chien // Appelle la fonction "imprimer" dans la classe de base Chien
Chien::imprimer(); Chien::imprimer();
std::cout << "Le chien appartient à " << proprietaire << "\n"; std::cout << "Le chien appartient à " << proprietaire << "\n";
// Imprime "Le chien est <nom> et pèse <poids>" // Affiche "Le chien est <nom> et pèse <poids>"
// "Le chien appartient à <proprietaire>" // "Le chien appartient à <proprietaire>"
} }
@@ -548,7 +547,7 @@ public:
// mais initialise le Point à la valeur par défaut (0, 0) // mais initialise le Point à la valeur par défaut (0, 0)
Point() { }; Point() { };
// La syntaxe suivante est connue comme une liste d'initialisation et est // La syntaxe suivante s'appelle une liste d'initialisation et est
// la façon correcte d'initialiser les valeurs des membres d'une classe. // la façon correcte d'initialiser les valeurs des membres d'une classe.
Point (double a, double b) : Point (double a, double b) :
x(a), x(a),
@@ -584,7 +583,7 @@ int main () {
// Appelle l'opérateur + du Point // Appelle l'opérateur + du Point
// Le point "haut" appelle la fonction + avec "droite" comme paramètre // Le point "haut" appelle la fonction + avec "droite" comme paramètre
Point resultat = haut + droite; Point resultat = haut + droite;
// Prints "Le résultat est haut-droite (1,1)" // Affiche "Le résultat est haut-droite (1,1)"
cout << "Le résultat est haut-droite (" << resultat.x << ',' cout << "Le résultat est haut-droite (" << resultat.x << ','
<< resultat.y << ")\n"; << resultat.y << ")\n";
return 0; return 0;
@@ -594,7 +593,7 @@ int main () {
// Patrons (templates) // Patrons (templates)
//////////////////////////////// ////////////////////////////////
// Les modèles (patrons, ou encore "templates") en C++ sont majoritairement // Les templates (patrons) en C++ sont majoritairement
// utilisés pour la programmation générique, bien qu'ils soient bien plus // utilisés pour la programmation générique, bien qu'ils soient bien plus
// puissants que les constructeurs génériques dans d'autres langages. // puissants que les constructeurs génériques dans d'autres langages.
// Ils gèrent également la spécialisation explicite et partielle ainsi que // Ils gèrent également la spécialisation explicite et partielle ainsi que
@@ -654,7 +653,7 @@ void aboyerTroisFois(const T& entree)
Chien docile; Chien docile;
docile.initialiserNom("Docile") docile.initialiserNom("Docile")
aboyerTroisFois(docile); // Imprime "Docile fait ouaf !" trois fois. aboyerTroisFois(docile); // Affiche "Docile fait ouaf !" trois fois.
// Les paramètres génériques (ou paramètres template) ne sont pas forcément des // Les paramètres génériques (ou paramètres template) ne sont pas forcément des
// classes : // classes :
@@ -673,16 +672,16 @@ void imprimerMessage<10>() {
cout << "Apprenez le C++ plus vite en seulement 10 minutes !" << endl; cout << "Apprenez le C++ plus vite en seulement 10 minutes !" << endl;
} }
// Imprime "Apprenez le C++ en 20 minutes !" // Affiche "Apprenez le C++ en 20 minutes !"
imprimerMessage<20>(); imprimerMessage<20>();
// Imprime "Apprenez le C++ plus vite en seulement 10 minutes !" // Affiche "Apprenez le C++ plus vite en seulement 10 minutes !"
imprimerMessage<10>(); imprimerMessage<10>();
////////////////////////////////// //////////////////////////////////
// Gestion des exceptions // Gestion des exceptions
////////////////////////////////// //////////////////////////////////
// La librairie standard fournit quelques types d'exception // La bibliothèque standard fournit quelques types d'exception
// (voir http://en.cppreference.com/w/cpp/error/exception) // (voir http://en.cppreference.com/w/cpp/error/exception)
// mais n'importe quel type peut être lancé en tant qu'exception. // mais n'importe quel type peut être lancé en tant qu'exception.
#include <exception> #include <exception>
@@ -743,22 +742,22 @@ void faireQuelqueChoseAvecUnFichier(const char* nomDuFichier)
// gestion du fichier si un problème se produit. // gestion du fichier si un problème se produit.
bool faireQuelqueChoseAvecUnFichier(const char* nomDuFichier) bool faireQuelqueChoseAvecUnFichier(const char* nomDuFichier)
{ {
FILE* fh = fopen(nomDuFichier, "r"); // Open the file in read mode FILE* fh = fopen(nomDuFichier, "r"); // Ouvre le fichier en mode lecture.
if (fh == nullptr) // Le pointeur retourné est null à un échec. if (fh == nullptr) // Le pointeur retourné est null à un échec.
return false; // Signale cet échec à l'appelant. return false; // Signale cet échec à l'appelant.
// Suppose que chaque fonction retourne faux si elle échoue // Suppose que chaque fonction retourne faux si elle échoue
if (!faireQuelqueChoseAvecLeFichier(fh)) { if (!faireQuelqueChoseAvecLeFichier(fh)) {
fclose(fh); // Ferme la gestion du fichier pour que cela ne fuite pas        fclose(fh); // Ferme le flux d'entrée du fichier pour empêcher les fuites
return false; // Propage l'erreur        return false; // Propage l'erreur
} }
if (!faireAutreChoseAvec(fh)) { if (!faireAutreChoseAvec(fh)) {
fclose(fh); // Ferme la gestion du fichier pour que cela ne fuite pas fclose(fh);
return false; // Propage l'erreur return false;
} }
fclose(fh); // Ferme la gestion du fichier pour que cela ne fuite pas fclose(fh);
return true; // Indique le succès return true;
} }
// Les programmeurs en C clarifient souvent tout cela en utilisant goto : // Les programmeurs en C clarifient souvent tout cela en utilisant goto :
@@ -822,9 +821,9 @@ void faireQuelqueChoseAvecUnFichier(const std::string& nomDuFichier)
// Ceci a des avantages _énormes_ : // Ceci a des avantages _énormes_ :
// 1. Peu importe la situation, la ressource (dans ce cas précis la gestion // 1. Peu importe la situation, la ressource (dans ce cas précis la gestion
// de fichier) sera libérée. Dès que le destructeur est écrit correctement, // de fichier) sera libérée. Si le destructeur est écrit correctement,
// il est _impossible_ d'oublier de fermer la gestion et d'entraîner une // il est _impossible_ d'oublier de fermer la gestion et d'entraîner une
// une fuite de ressources. // une fuite de ressources (si l'objet est sur la pile).
// 2. Remarquez que le code est beaucoup plus clair. // 2. Remarquez que le code est beaucoup plus clair.
// Le destructeur gère la fermeture du fichier discrètement sans avoir // Le destructeur gère la fermeture du fichier discrètement sans avoir
// besoin de s'en préoccuper. // besoin de s'en préoccuper.