{"id":17968225,"url":"https://github.com/rougier/cpp-crash-course","last_synced_at":"2025-05-16T18:07:42.513Z","repository":{"id":38272763,"uuid":"179418322","full_name":"rougier/CPP-Crash-Course","owner":"rougier","description":"C++ Crash Course","archived":false,"fork":false,"pushed_at":"2024-09-02T08:43:03.000Z","size":50,"stargazers_count":748,"open_issues_count":1,"forks_count":128,"subscribers_count":31,"default_branch":"master","last_synced_at":"2025-05-15T13:58:11.701Z","etag":null,"topics":["beginner","c-plus-plus","course"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rougier.png","metadata":{"files":{"readme":"README.html","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-04-04T03:57:41.000Z","updated_at":"2025-05-08T19:56:28.000Z","dependencies_parsed_at":"2024-11-29T17:03:41.379Z","dependency_job_id":"792f8ecc-8410-49c7-bcb3-56e7ebdf4b95","html_url":"https://github.com/rougier/CPP-Crash-Course","commit_stats":{"total_commits":4,"total_committers":4,"mean_commits":1.0,"dds":0.75,"last_synced_commit":"9c975863975028b61f1b510bfc3ed9e306ec8701"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rougier%2FCPP-Crash-Course","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rougier%2FCPP-Crash-Course/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rougier%2FCPP-Crash-Course/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rougier%2FCPP-Crash-Course/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rougier","download_url":"https://codeload.github.com/rougier/CPP-Crash-Course/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254582907,"owners_count":22095518,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["beginner","c-plus-plus","course"],"created_at":"2024-10-29T14:20:38.779Z","updated_at":"2025-05-16T18:07:42.492Z","avatar_url":"https://github.com/rougier.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c?xml version=\"1.0\" encoding=\"utf-8\" ?\u003e\n\u003c!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"\u003e\n\u003chtml xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\"\u003e\n\u003chead\u003e\n\u003cmeta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /\u003e\n\u003cmeta name=\"generator\" content=\"Docutils 0.8: http://docutils.sourceforge.net/\" /\u003e\n\u003ctitle\u003eC++ crash course for C programmers\u003c/title\u003e\n\u003cmeta name=\"author\" content=\"Nicolas P. Rougier\" /\u003e\n\u003clink rel=\"stylesheet\" href=\"stylesheet.css\" type=\"text/css\" /\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n\u003cdiv class=\"document\" id=\"c-crash-course-for-c-programmers\"\u003e\n\u003ch1 class=\"title\"\u003eC++ crash course for C programmers\u003c/h1\u003e\n\u003ctable class=\"docinfo\" frame=\"void\" rules=\"none\"\u003e\n\u003ccol class=\"docinfo-name\" /\u003e\n\u003ccol class=\"docinfo-content\" /\u003e\n\u003ctbody valign=\"top\"\u003e\n\u003ctr\u003e\u003cth class=\"docinfo-name\"\u003eAuthor:\u003c/th\u003e\n\u003ctd\u003e\u003ca class=\"first reference external\" href=\"http://www.loria.fr/~rougier\"\u003eNicolas P. Rougier\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"field\"\u003e\u003cth class=\"docinfo-name\"\u003eSources:\u003c/th\u003e\u003ctd class=\"field-body\"\u003e\u003ca class=\"reference external\" href=\"crash-course.rst\"\u003ecrash-course.rst\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cdiv class=\"contents local topic\" id=\"contents\"\u003e\n\u003cul class=\"auto-toc simple\"\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#foreword\" id=\"id6\"\u003e1\u0026nbsp;\u0026nbsp;\u0026nbsp;Foreword\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#from-c-to-c\" id=\"id7\"\u003e2\u0026nbsp;\u0026nbsp;\u0026nbsp;From C to C++\u003c/a\u003e\u003cul class=\"auto-toc\"\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#input-output\" id=\"id8\"\u003e2.1\u0026nbsp;\u0026nbsp;\u0026nbsp;Input/Output\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#new-delete\" id=\"id9\"\u003e2.2\u0026nbsp;\u0026nbsp;\u0026nbsp;New/Delete\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#references\" id=\"id10\"\u003e2.3\u0026nbsp;\u0026nbsp;\u0026nbsp;References\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#default-parameters\" id=\"id11\"\u003e2.4\u0026nbsp;\u0026nbsp;\u0026nbsp;Default parameters\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#namespaces\" id=\"id12\"\u003e2.5\u0026nbsp;\u0026nbsp;\u0026nbsp;Namespaces\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#overloading\" id=\"id13\"\u003e2.6\u0026nbsp;\u0026nbsp;\u0026nbsp;Overloading\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#const-inline\" id=\"id14\"\u003e2.7\u0026nbsp;\u0026nbsp;\u0026nbsp;Const \u0026amp; inline\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#mixing-c-and-c\" id=\"id15\"\u003e2.8\u0026nbsp;\u0026nbsp;\u0026nbsp;Mixing C and C++\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#exercises\" id=\"id16\"\u003e2.9\u0026nbsp;\u0026nbsp;\u0026nbsp;Exercises\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#classes\" id=\"id17\"\u003e3\u0026nbsp;\u0026nbsp;\u0026nbsp;Classes\u003c/a\u003e\u003cul class=\"auto-toc\"\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#constructors\" id=\"id18\"\u003e3.1\u0026nbsp;\u0026nbsp;\u0026nbsp;Constructors\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#destructor\" id=\"id19\"\u003e3.2\u0026nbsp;\u0026nbsp;\u0026nbsp;Destructor\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#access-control\" id=\"id20\"\u003e3.3\u0026nbsp;\u0026nbsp;\u0026nbsp;Access control\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#initialization-list\" id=\"id21\"\u003e3.4\u0026nbsp;\u0026nbsp;\u0026nbsp;Initialization list\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#operator-overloading\" id=\"id22\"\u003e3.5\u0026nbsp;\u0026nbsp;\u0026nbsp;Operator overloading\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#friends\" id=\"id23\"\u003e3.6\u0026nbsp;\u0026nbsp;\u0026nbsp;Friends\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#exercices\" id=\"id24\"\u003e3.7\u0026nbsp;\u0026nbsp;\u0026nbsp;Exercices\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#inheritance\" id=\"id25\"\u003e4\u0026nbsp;\u0026nbsp;\u0026nbsp;Inheritance\u003c/a\u003e\u003cul class=\"auto-toc\"\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#basics\" id=\"id26\"\u003e4.1\u0026nbsp;\u0026nbsp;\u0026nbsp;Basics\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#virtual-methods\" id=\"id27\"\u003e4.2\u0026nbsp;\u0026nbsp;\u0026nbsp;Virtual methods\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#abstract-classes\" id=\"id28\"\u003e4.3\u0026nbsp;\u0026nbsp;\u0026nbsp;Abstract classes\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#multiple-inheritance\" id=\"id29\"\u003e4.4\u0026nbsp;\u0026nbsp;\u0026nbsp;Multiple inheritance\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#id1\" id=\"id30\"\u003e4.5\u0026nbsp;\u0026nbsp;\u0026nbsp;Exercices\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#exceptions\" id=\"id31\"\u003e5\u0026nbsp;\u0026nbsp;\u0026nbsp;Exceptions\u003c/a\u003e\u003cul class=\"auto-toc\"\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#the-zen-of-python\" id=\"id32\"\u003e5.1\u0026nbsp;\u0026nbsp;\u0026nbsp;The Zen of Python\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#catch-me-if-you-can\" id=\"id33\"\u003e5.2\u0026nbsp;\u0026nbsp;\u0026nbsp;Catch me if you can\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#creating-your-own-exception\" id=\"id34\"\u003e5.3\u0026nbsp;\u0026nbsp;\u0026nbsp;Creating your own exception\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#standard-exceptions\" id=\"id35\"\u003e5.4\u0026nbsp;\u0026nbsp;\u0026nbsp;Standard exceptions\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#id2\" id=\"id36\"\u003e5.5\u0026nbsp;\u0026nbsp;\u0026nbsp;Exercices\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#streams\" id=\"id37\"\u003e6\u0026nbsp;\u0026nbsp;\u0026nbsp;Streams\u003c/a\u003e\u003cul class=\"auto-toc\"\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#iostream-and-ios\" id=\"id38\"\u003e6.1\u0026nbsp;\u0026nbsp;\u0026nbsp;iostream and ios\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#class-input-output\" id=\"id39\"\u003e6.2\u0026nbsp;\u0026nbsp;\u0026nbsp;Class input/output\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#working-with-files\" id=\"id40\"\u003e6.3\u0026nbsp;\u0026nbsp;\u0026nbsp;Working with files\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#working-with-strings\" id=\"id41\"\u003e6.4\u0026nbsp;\u0026nbsp;\u0026nbsp;Working with strings\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#id3\" id=\"id42\"\u003e6.5\u0026nbsp;\u0026nbsp;\u0026nbsp;Exercices\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#templates\" id=\"id43\"\u003e7\u0026nbsp;\u0026nbsp;\u0026nbsp;Templates\u003c/a\u003e\u003cul class=\"auto-toc\"\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#template-parameters\" id=\"id44\"\u003e7.1\u0026nbsp;\u0026nbsp;\u0026nbsp;Template parameters\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#template-function\" id=\"id45\"\u003e7.2\u0026nbsp;\u0026nbsp;\u0026nbsp;Template function\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#template-class\" id=\"id46\"\u003e7.3\u0026nbsp;\u0026nbsp;\u0026nbsp;Template class\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#template-specialization\" id=\"id47\"\u003e7.4\u0026nbsp;\u0026nbsp;\u0026nbsp;Template specialization\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#id4\" id=\"id48\"\u003e7.5\u0026nbsp;\u0026nbsp;\u0026nbsp;Exercices\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#standard-template-library\" id=\"id49\"\u003e8\u0026nbsp;\u0026nbsp;\u0026nbsp;Standard Template Library\u003c/a\u003e\u003cul class=\"auto-toc\"\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#containers\" id=\"id50\"\u003e8.1\u0026nbsp;\u0026nbsp;\u0026nbsp;Containers\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#iterators\" id=\"id51\"\u003e8.2\u0026nbsp;\u0026nbsp;\u0026nbsp;Iterators\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#algorithms\" id=\"id52\"\u003e8.3\u0026nbsp;\u0026nbsp;\u0026nbsp;Algorithms\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#id5\" id=\"id53\"\u003e8.4\u0026nbsp;\u0026nbsp;\u0026nbsp;Exercices\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#external-links\" id=\"id54\"\u003e9\u0026nbsp;\u0026nbsp;\u0026nbsp;External links\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"foreword\"\u003e\n\u003ch1\u003e1\u0026nbsp;\u0026nbsp;\u0026nbsp;Foreword\u003c/h1\u003e\n\u003cp\u003eThis is an introduction to C++ for C programmers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eIf you can't understand the code below, you'd better start with a C tutorial.\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"cp\"\u003e#include \u0026lt;stdio.h\u0026gt;\n\u003c/span\u003e\n\u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eargc\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003echar\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003eargv\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eprintf\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026quot;Hello World!\u003c/span\u003e\u003cspan class=\"se\"\u003e\\n\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026quot;\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eIf you don't know what are the stack and the heap, you'd better have a look at\nsome architecture \u0026amp; system introduction.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eIf you know java, that might help a bit.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eIf you think \u003ca class=\"reference external\" href=\"http://www.python.org\"\u003epython\u003c/a\u003e is cool, you're right, but\nstill, this is not the place.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eIf you never heard about \u003ca class=\"reference external\" href=\"http://www2.research.att.com/~bs/\"\u003eBjarne Stroustrup\u003c/a\u003e, you might be at the right place.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eHere is a list of C++ specific keywords:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\nasm         dynamic_cast  namespace  reinterpret_cast  try\nbool        explicit      new        static_cast       typeid\ncatch       false         operator   template          typename\nclass       friend        private    this              using\nconst_cast  inline        public     throw             virtual\ndelete      mutable       protected  true              wchar_t\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"from-c-to-c\"\u003e\n\u003ch1\u003e2\u0026nbsp;\u0026nbsp;\u0026nbsp;From C to C++\u003c/h1\u003e\n\u003cp\u003eEven if C++ is slanted toward object-oriented programming (OOP), you can\nnevertheless use any c++ compiler to compile c code and benefits from some c++\ngoodies.\u003c/p\u003e\n\u003cdiv class=\"section\" id=\"input-output\"\u003e\n\u003ch2\u003e2.1\u0026nbsp;\u0026nbsp;\u0026nbsp;Input/Output\u003c/h2\u003e\n\u003cp\u003ePrefer the use of \u003ctt class=\"docutils literal\"\u003e\u0026lt;iostream\u0026gt;\u003c/tt\u003e for input/output operations (see stream\nsection for explanation).\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"cp\"\u003e#include \u0026lt;iostream\u0026gt;\n\u003c/span\u003e\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eargc\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003echar\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003eargv\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003ei\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026quot;Please enter an integer value: \u0026quot;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ecin\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003ei\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026quot;The value you entered is \u0026quot;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003ei\u003c/span\u003e  \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eendl\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"new-delete\"\u003e\n\u003ch2\u003e2.2\u0026nbsp;\u0026nbsp;\u0026nbsp;New/Delete\u003c/h2\u003e\n\u003cp\u003eThe \u003ctt class=\"docutils literal\"\u003enew\u003c/tt\u003e and \u003ctt class=\"docutils literal\"\u003edelete\u003c/tt\u003e keywords are used to allocate and free memory. They\nare \u0026quot;object-aware\u0026quot; so you'd better use them instead of \u003ctt class=\"docutils literal\"\u003emalloc\u003c/tt\u003e and\n\u003ctt class=\"docutils literal\"\u003efree\u003c/tt\u003e. In any case, never cross the streams (new/free or malloc/delete).\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"k\"\u003edelete\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003eb\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e];\u003c/span\u003e\n\u003cspan class=\"k\"\u003edelete\u003c/span\u003e \u003cspan class=\"p\"\u003e[]\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/pre\u003e\n\u003cp\u003e\u003ctt class=\"docutils literal\"\u003edelete\u003c/tt\u003e does two things: it calls the destructor and it deallocates the\nmemory.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"references\"\u003e\n\u003ch2\u003e2.3\u0026nbsp;\u0026nbsp;\u0026nbsp;References\u003c/h2\u003e\n\u003cp\u003eA reference allows to declare an alias to another variable. As long as the\naliased variable lives, you can use indifferently the variable or the alias.\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"n\"\u003efoo\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"n\"\u003efoo\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e42\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eendl\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/pre\u003e\n\u003cp\u003eReferences are extremely useful when used with function arguments since it\nsaves the cost of copying parameters into the stack when calling the function.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"default-parameters\"\u003e\n\u003ch2\u003e2.4\u0026nbsp;\u0026nbsp;\u0026nbsp;Default parameters\u003c/h2\u003e\n\u003cp\u003eYou can specify default values for function parameters. When the function is\ncalled with fewer parameters, default values are used.\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"kt\"\u003efloat\u003c/span\u003e \u003cspan class=\"n\"\u003efoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003efloat\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003efloat\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003efloat\u003c/span\u003e \u003cspan class=\"n\"\u003ec\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e\u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003cspan class=\"n\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e;}\u003c/span\u003e\n\n\u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003efoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003eendl\u003c/span\u003e\n     \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003efoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003eendl\u003c/span\u003e\n     \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003efoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003eendl\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/pre\u003e\n\u003cp\u003eYou should obtain values 4, 5 and 6.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"namespaces\"\u003e\n\u003ch2\u003e2.5\u0026nbsp;\u0026nbsp;\u0026nbsp;Namespaces\u003c/h2\u003e\n\u003cp\u003eNamespace allows to group classes, functions and variable under a common scope\nname that can be referenced elsewhere.\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"k\"\u003enamespace\u003c/span\u003e \u003cspan class=\"n\"\u003efirst\u003c/span\u003e  \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003evar\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003cspan class=\"k\"\u003enamespace\u003c/span\u003e \u003cspan class=\"n\"\u003esecond\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003evar\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003efirst\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003evar\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003eendl\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003esecond\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003evar\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003eendl\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/pre\u003e\n\u003cp\u003eYou should obtain values 3 and 5. There exists some standard namespace in the\nstandard template library such as std.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"overloading\"\u003e\n\u003ch2\u003e2.6\u0026nbsp;\u0026nbsp;\u0026nbsp;Overloading\u003c/h2\u003e\n\u003cp\u003eFunction overloading refers to the possibility of creating multiple functions\nwith the same name as long as they have different parameters (type and/or\nnumber).\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"kt\"\u003efloat\u003c/span\u003e \u003cspan class=\"n\"\u003eadd\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003efloat\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003efloat\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e\u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"p\"\u003e;}\u003c/span\u003e\n\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eadd\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e\u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"p\"\u003e;}\u003c/span\u003e\n\u003c/pre\u003e\n\u003cp\u003eIt is not legal to overload a function based on the return type (but you can do it\n\u003ca class=\"reference external\" href=\"http://stackoverflow.com/questions/442026/function-overloading-by-return-type\"\u003eanyway\u003c/a\u003e)\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"const-inline\"\u003e\n\u003ch2\u003e2.7\u0026nbsp;\u0026nbsp;\u0026nbsp;Const \u0026amp; inline\u003c/h2\u003e\n\u003cp\u003eDefines and macros are bad if not used properly as illustrated below\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"cp\"\u003e#define SQUARE(x) x*x\n\u003c/span\u003e\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eresult\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eSQUARE\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/pre\u003e\n\u003cp\u003eFor constants, prefer the const notation:\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"k\"\u003econst\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003etwo\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/pre\u003e\n\u003cp\u003eFor macros, prefer the inline notation:\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"kr\"\u003einline\u003c/span\u003e \u003cspan class=\"n\"\u003esquare\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"mixing-c-and-c\"\u003e\n\u003ch2\u003e2.8\u0026nbsp;\u0026nbsp;\u0026nbsp;Mixing C and C++\u003c/h2\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"cp\"\u003e#ifdef __cplusplus\n\u003c/span\u003e\u003cspan class=\"k\"\u003eextern\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026quot;C\u0026quot;\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003cspan class=\"cp\"\u003e#endif\n\n#include \u0026quot;some-c-code.h\u0026quot;\n\n#ifdef __cplusplus\n\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003cspan class=\"cp\"\u003e#endif\n\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"exercises\"\u003e\n\u003ch2\u003e2.9\u0026nbsp;\u0026nbsp;\u0026nbsp;Exercises\u003c/h2\u003e\n\u003col class=\"arabic\"\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eWrite a basic makefile for compiling sources\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003esolution\u003c/strong\u003e: \u003ca class=\"reference external\" href=\"sources/Makefile\"\u003eMakefile\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eHow would you declare:\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cblockquote\u003e\n\u003cul class=\"simple\"\u003e\n\u003cli\u003eA pointer to a char\u003c/li\u003e\n\u003cli\u003eA constant pointer to a char\u003c/li\u003e\n\u003cli\u003eA pointer to a constant char\u003c/li\u003e\n\u003cli\u003eA constant pointer to a constant char\u003c/li\u003e\n\u003cli\u003eA reference to a char\u003c/li\u003e\n\u003cli\u003eA reference to a constant char\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003esolution\u003c/strong\u003e: \u003ca class=\"reference external\" href=\"sources/crash-course-2.1.cc\"\u003ecrash-course-2.1.cc\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003col class=\"arabic simple\" start=\"3\"\u003e\n\u003cli\u003eCreate  a two-dimensional array of  integers (size is  n x n), fill  it with\ncorresponding indices (a[i][j] = i*n+j), test it and finally, delete it.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cblockquote\u003e\n\u003cstrong\u003esolution\u003c/strong\u003e: \u003ca class=\"reference external\" href=\"sources/crash-course-2.2.cc\"\u003ecrash-course-2.2.cc\u003c/a\u003e\u003c/blockquote\u003e\n\u003col class=\"arabic simple\" start=\"4\"\u003e\n\u003cli\u003eWrite a function that swap two integers, then two pointers.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cblockquote\u003e\n\u003cstrong\u003esolution\u003c/strong\u003e: \u003ca class=\"reference external\" href=\"sources/crash-course-2.3.cc\"\u003ecrash-course-2.3.cc\u003c/a\u003e\u003c/blockquote\u003e\n\u003col class=\"arabic\" start=\"5\"\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eIs this legal ?\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eadd\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e\u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eadd\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003ec\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e\u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003cspan class=\"n\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cblockquote\u003e\n\u003cstrong\u003esolution\u003c/strong\u003e: \u003ca class=\"reference external\" href=\"sources/crash-course-2.4.cc\"\u003ecrash-course-2.4.cc\u003c/a\u003e\u003c/blockquote\u003e\n\u003col class=\"arabic simple\" start=\"6\"\u003e\n\u003cli\u003eWrite a \u003ctt class=\"docutils literal\"\u003econst correct\u003c/tt\u003e division function.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cblockquote\u003e\n\u003cstrong\u003esolution\u003c/strong\u003e: \u003ca class=\"reference external\" href=\"sources/crash-course-2.5.cc\"\u003ecrash-course-2.5.cc\u003c/a\u003e\u003c/blockquote\u003e\n\u003col class=\"arabic simple\" start=\"7\"\u003e\n\u003cli\u003eWhat's the difference between \u003ctt class=\"docutils literal\"\u003eint const* p\u003c/tt\u003e, \u003ctt class=\"docutils literal\"\u003eint* const p\u003c/tt\u003e\nand \u003ctt class=\"docutils literal\"\u003eint const* const p\u003c/tt\u003e ?\u003c/li\u003e\n\u003c/ol\u003e\n\u003cblockquote\u003e\n\u003cstrong\u003esolution\u003c/strong\u003e: \u003ca class=\"reference external\" href=\"sources/crash-course-2.6.cc\"\u003ecrash-course-2.6.cc\u003c/a\u003e\u003c/blockquote\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"classes\"\u003e\n\u003ch1\u003e3\u0026nbsp;\u0026nbsp;\u0026nbsp;Classes\u003c/h1\u003e\n\u003cp\u003eA class migh be considered as an extended concept of a data structure: instead\nof holding only data, it can hold both data and functions. An object is an\ninstantiation of a class. By default, all attributes and functions of a class\nare private (see below Access control). If you want a public default behavior,\nyou can use keyword \u003ctt class=\"docutils literal\"\u003estruct\u003c/tt\u003e instead of keyword \u003ctt class=\"docutils literal\"\u003eclass\u003c/tt\u003e in the declaration.\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eFoo\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eattribute\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\n\u003cspan class=\"k\"\u003estruct\u003c/span\u003e \u003cspan class=\"n\"\u003eBar\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eattribute\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\n\u003cspan class=\"n\"\u003eFoo\u003c/span\u003e \u003cspan class=\"n\"\u003efoo\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"n\"\u003efoo\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eattribute\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"c1\"\u003e// WRONG\n\u003c/span\u003e\n\u003cspan class=\"n\"\u003eBar\u003c/span\u003e \u003cspan class=\"n\"\u003ebar\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"n\"\u003ebar\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eattribute\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e  \u003cspan class=\"c1\"\u003e// OK\n\u003c/span\u003e\n\u003c/pre\u003e\n\u003cdiv class=\"section\" id=\"constructors\"\u003e\n\u003ch2\u003e3.1\u0026nbsp;\u0026nbsp;\u0026nbsp;Constructors\u003c/h2\u003e\n\u003cp\u003eIt is possible to specify zero, one or more constructors for the class.\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"cp\"\u003e#include \u0026lt;iostream\u0026gt;\n\u003c/span\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eFoo\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003cspan class=\"k\"\u003epublic\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026quot;Foo constructor 1 called\u0026quot;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eendl\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003evalue\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026quot;Foo constructor 2 called\u0026quot;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eendl\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003emain\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eargc\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003echar\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003eargv\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e \u003cspan class=\"n\"\u003efoo_1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efoo_2\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"destructor\"\u003e\n\u003ch2\u003e3.2\u0026nbsp;\u0026nbsp;\u0026nbsp;Destructor\u003c/h2\u003e\n\u003cp\u003eThere can be only one destructor per class. It takes no argument and returns\nnothing.\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"cp\"\u003e#include \u0026lt;iostream\u0026gt;\n\u003c/span\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eFoo\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003cspan class=\"k\"\u003epublic\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\n    \u003cspan class=\"o\"\u003e~\u003c/span\u003e\u003cspan class=\"n\"\u003eFoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026quot;Foo destructor called\u0026quot;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eendl\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003emain\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eargc\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003echar\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003eargv\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e \u003cspan class=\"n\"\u003efoo\u003c/span\u003e\u003cspan class=\"p\"\u003e();\u003c/span\u003e\n    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/pre\u003e\n\u003cp\u003eNote that you generally never need to explicitly call a destructor.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"access-control\"\u003e\n\u003ch2\u003e3.3\u0026nbsp;\u0026nbsp;\u0026nbsp;Access control\u003c/h2\u003e\n\u003cp\u003eYou can have fine control over who is granted access to a class function or\nattribute by specifying an explicit access policy:\u003c/p\u003e\n\u003cul class=\"simple\"\u003e\n\u003cli\u003e\u003cstrong\u003epublic\u003c/strong\u003e:    Anyone is granted access\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eprotected\u003c/strong\u003e: Only derived classes are granted access\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eprivate\u003c/strong\u003e:   No one but friends are granted access\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"initialization-list\"\u003e\n\u003ch2\u003e3.4\u0026nbsp;\u0026nbsp;\u0026nbsp;Initialization list\u003c/h2\u003e\n\u003cp\u003eObject's member should be initialized using initialization lists\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eFoo\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003e_value\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"k\"\u003epublic\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003e_value\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003c/pre\u003e\n\u003cp\u003eIt's cheaper, better and faster.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"operator-overloading\"\u003e\n\u003ch2\u003e3.5\u0026nbsp;\u0026nbsp;\u0026nbsp;Operator overloading\u003c/h2\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eFoo\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003cspan class=\"k\"\u003eprivate\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\n    \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003e_value\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"k\"\u003epublic\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003evalue\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003e_value\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\n    \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e \u003cspan class=\"k\"\u003eoperator\u003c/span\u003e\u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"k\"\u003econst\u003c/span\u003e \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"n\"\u003eother\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"n\"\u003e_value\u003c/span\u003e\u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"n\"\u003eother\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003e_value\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\n    \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e \u003cspan class=\"k\"\u003eoperator\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"k\"\u003econst\u003c/span\u003e \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"n\"\u003eother\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"n\"\u003e_value\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"n\"\u003eother\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003e_value\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"friends\"\u003e\n\u003ch2\u003e3.6\u0026nbsp;\u0026nbsp;\u0026nbsp;Friends\u003c/h2\u003e\n\u003cp\u003eFriends are either functions or other classes that are granted privileged\naccess to a class.\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"cp\"\u003e#include \u0026lt;iostream\u0026gt;\n\u003c/span\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eFoo\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003cspan class=\"k\"\u003epublic\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\n    \u003cspan class=\"k\"\u003efriend\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eostream\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"k\"\u003eoperator\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eostream\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"n\"\u003eoutput\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n                                      \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e \u003cspan class=\"k\"\u003econst\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"n\"\u003ethat\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eoutput\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003ethat\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003e_value\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003cspan class=\"k\"\u003eprivate\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\n    \u003cspan class=\"kt\"\u003edouble\u003c/span\u003e \u003cspan class=\"n\"\u003e_value\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003emain\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eargc\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003echar\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003eargv\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n  \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e \u003cspan class=\"n\"\u003efoo\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n  \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026quot;Foo object: \u0026quot;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003efoo\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eendl\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n  \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"exercices\"\u003e\n\u003ch2\u003e3.7\u0026nbsp;\u0026nbsp;\u0026nbsp;Exercices\u003c/h2\u003e\n\u003col class=\"arabic\"\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eWhy the following code doesn't compile ?\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eFoo\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e \u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003emain\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eargc\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003echar\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003eargv\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e \u003cspan class=\"n\"\u003efoo\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003esolution\u003c/strong\u003e: \u003ca class=\"reference external\" href=\"sources/crash-course-3.1.cc\"\u003ecrash-course-3.1.cc\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eWrite a \u003ctt class=\"docutils literal\"\u003eFoo\u003c/tt\u003e class with default and copy constructors and add also an\nassignment operator. Write some code to highlight the use of each of them.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003esolution\u003c/strong\u003e: \u003ca class=\"reference external\" href=\"sources/crash-course-3.2.cc\"\u003ecrash-course-3.2.cc\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eWrite a \u003ctt class=\"docutils literal\"\u003ePoint\u003c/tt\u003e class that can be constructed using cartesian or polar\ncoordinates.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003esolution\u003c/strong\u003e: \u003ca class=\"reference external\" href=\"sources/crash-course-3.3.cc\"\u003ecrash-course-3.3.cc\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eWrite a \u003ctt class=\"docutils literal\"\u003eFoo\u003c/tt\u003e class and provide it with an input method.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003esolution\u003c/strong\u003e: \u003ca class=\"reference external\" href=\"sources/crash-course-3.4.cc\"\u003ecrash-course-3.4.cc\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eIs is possible to write something like \u003ctt class=\"docutils literal\"\u003e\u003cspan class=\"pre\"\u003efoo.method1().method2()\u003c/span\u003e\u003c/tt\u003e ?\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003esolution\u003c/strong\u003e: \u003ca class=\"reference external\" href=\"sources/crash-course-3.5.cc\"\u003ecrash-course-3.5.cc\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"inheritance\"\u003e\n\u003ch1\u003e4\u0026nbsp;\u0026nbsp;\u0026nbsp;Inheritance\u003c/h1\u003e\n\u003cdiv class=\"section\" id=\"basics\"\u003e\n\u003ch2\u003e4.1\u0026nbsp;\u0026nbsp;\u0026nbsp;Basics\u003c/h2\u003e\n\u003cp\u003eInheritance is done at the class definition level by specifying the base class\nand the type of inheritance.\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eFoo\u003c/span\u003e                            \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"cm\"\u003e/* ... */\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eBar_public\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"k\"\u003epublic\u003c/span\u003e \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e        \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"cm\"\u003e/* ... */\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eBar_private\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"k\"\u003eprivate\u003c/span\u003e \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e      \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"cm\"\u003e/* ... */\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eBar_protected\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"k\"\u003eprotected\u003c/span\u003e \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e  \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"cm\"\u003e/* ... */\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003c/pre\u003e\n\u003cp\u003e\u003ctt class=\"docutils literal\"\u003eBar_public\u003c/tt\u003e, \u003ctt class=\"docutils literal\"\u003eBar_private\u003c/tt\u003e and \u003ctt class=\"docutils literal\"\u003eBar_protected\u003c/tt\u003e are derived from \u003ctt class=\"docutils literal\"\u003eFoo\u003c/tt\u003e.\n\u003ctt class=\"docutils literal\"\u003eFoo\u003c/tt\u003e is the base class of \u003ctt class=\"docutils literal\"\u003eBar_public\u003c/tt\u003e, \u003ctt class=\"docutils literal\"\u003eBar_private\u003c/tt\u003e and \u003ctt class=\"docutils literal\"\u003eBar_protected\u003c/tt\u003e.\u003c/p\u003e\n\u003cul class=\"simple\"\u003e\n\u003cli\u003eIn \u003ctt class=\"docutils literal\"\u003eBar_public\u003c/tt\u003e, public parts of \u003ctt class=\"docutils literal\"\u003eFoo\u003c/tt\u003e are public,\nprotected parts of \u003ctt class=\"docutils literal\"\u003eFoo\u003c/tt\u003e are protected\u003c/li\u003e\n\u003cli\u003eIn \u003ctt class=\"docutils literal\"\u003eBar_private\u003c/tt\u003e, public and protected parts of \u003ctt class=\"docutils literal\"\u003eFoo\u003c/tt\u003e are private\u003c/li\u003e\n\u003cli\u003eIn \u003ctt class=\"docutils literal\"\u003eBar_protected\u003c/tt\u003e, public and protected parts of \u003ctt class=\"docutils literal\"\u003eFoo\u003c/tt\u003e are protected\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"virtual-methods\"\u003e\n\u003ch2\u003e4.2\u0026nbsp;\u0026nbsp;\u0026nbsp;Virtual methods\u003c/h2\u003e\n\u003cp\u003eA \u003ctt class=\"docutils literal\"\u003evirtual\u003c/tt\u003e function allows derived classes to replace the implementation\nprovided by the base class (yes, it is not automatic...). Non virtual methods\nare resolved statically (at compile time) while virtual methods are resolved\ndynamically (at run time).\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eFoo\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003cspan class=\"k\"\u003epublic\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n    \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"n\"\u003emethod1\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n    \u003cspan class=\"k\"\u003evirtual\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"n\"\u003emethod2\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eBar\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"k\"\u003epublic\u003c/span\u003e \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003cspan class=\"k\"\u003epublic\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eBar\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n    \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"n\"\u003emethod1\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n    \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"n\"\u003emethod2\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\n\u003cspan class=\"n\"\u003eFoo\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003ebar\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"n\"\u003eBar\u003c/span\u003e\u003cspan class=\"p\"\u003e();\u003c/span\u003e\n\u003cspan class=\"n\"\u003ebar\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003emethod1\u003c/span\u003e\u003cspan class=\"p\"\u003e();\u003c/span\u003e\n\u003cspan class=\"n\"\u003ebar\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003emethod2\u003c/span\u003e\u003cspan class=\"p\"\u003e();\u003c/span\u003e\n\u003c/pre\u003e\n\u003cp\u003eMake sure your destructor is virtual when you have derived class.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"abstract-classes\"\u003e\n\u003ch2\u003e4.3\u0026nbsp;\u0026nbsp;\u0026nbsp;Abstract classes\u003c/h2\u003e\n\u003cp\u003eYou can define pure virtual method that prohibits the base object to be\ninstantiated. Derived classes need then to implement the virtual method.\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eFoo\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003cspan class=\"k\"\u003epublic\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n    \u003cspan class=\"k\"\u003evirtual\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"n\"\u003emethod\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eBar\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"k\"\u003epublic\u003c/span\u003e \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003cspan class=\"k\"\u003epublic\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n    \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"n\"\u003emethod\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"multiple-inheritance\"\u003e\n\u003ch2\u003e4.4\u0026nbsp;\u0026nbsp;\u0026nbsp;Multiple inheritance\u003c/h2\u003e\n\u003cp\u003eA class may inherit from multiple base classes but you have to be careful:\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eFoo\u003c/span\u003e               \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003eprotected\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eBar1\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"k\"\u003epublic\u003c/span\u003e \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"cm\"\u003e/* ... */\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eBar2\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"k\"\u003epublic\u003c/span\u003e \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"cm\"\u003e/* ... */\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eBar3\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"k\"\u003epublic\u003c/span\u003e \u003cspan class=\"n\"\u003eBar1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"k\"\u003epublic\u003c/span\u003e \u003cspan class=\"n\"\u003eBar2\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"n\"\u003emethod\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n       \u003cspan class=\"n\"\u003edata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"c1\"\u003e// !!! BAD\n\u003c/span\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003c/pre\u003e\n\u003cp\u003eIn class Bar3, the \u003ctt class=\"docutils literal\"\u003edata\u003c/tt\u003e reference is ambiguous since it could refer to\nBar1::data or Bar2::data. This problem is referred as the \u003cstrong\u003ediamond\nproblem\u003c/strong\u003e. You can eliminete the problem by explicitely specifying the data\norigin (e.g. Bar1::data) or by using virtual inheritance in Bar1 and Bar2.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"id1\"\u003e\n\u003ch2\u003e4.5\u0026nbsp;\u0026nbsp;\u0026nbsp;Exercices\u003c/h2\u003e\n\u003col class=\"arabic\"\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eWrite a \u003ctt class=\"docutils literal\"\u003eBar\u003c/tt\u003e class that inherits from a \u003ctt class=\"docutils literal\"\u003eFoo\u003c/tt\u003e class and makes\nconstructor and destructor methods to print something when called.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003esolution\u003c/strong\u003e: \u003ca class=\"reference external\" href=\"sources/crash-course-4.1.cc\"\u003ecrash-course-4.1.cc\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eWrite a \u003ctt class=\"docutils literal\"\u003efoo\u003c/tt\u003e function and make it called from a class that has\na \u003ctt class=\"docutils literal\"\u003efoo\u003c/tt\u003e method.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003esolution\u003c/strong\u003e: \u003ca class=\"reference external\" href=\"sources/crash-course-4.2.cc\"\u003ecrash-course-4.2.cc\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eWrite a \u003ctt class=\"docutils literal\"\u003eReal\u003c/tt\u003e base class and a derived \u003ctt class=\"docutils literal\"\u003eInteger\u003c/tt\u003e class with all common\noperators (+,-,*,/)\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003esolution\u003c/strong\u003e: \u003ca class=\"reference external\" href=\"sources/crash-course-4.3.cc\"\u003ecrash-course-4.3.cc\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eWrite a \u003ctt class=\"docutils literal\"\u003eSingleton\u003c/tt\u003e class such that only one object of this class can be\ncreated.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003esolution\u003c/strong\u003e: \u003ca class=\"reference external\" href=\"sources/crash-course-4.4.cc\"\u003ecrash-course-4.4.cc\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eWrite a functor class\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003esolution\u003c/strong\u003e: \u003ca class=\"reference external\" href=\"sources/crash-course-4.5.cc\"\u003ecrash-course-4.5.cc\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"exceptions\"\u003e\n\u003ch1\u003e5\u0026nbsp;\u0026nbsp;\u0026nbsp;Exceptions\u003c/h1\u003e\n\u003cdiv class=\"section\" id=\"the-zen-of-python\"\u003e\n\u003ch2\u003e5.1\u0026nbsp;\u0026nbsp;\u0026nbsp;The Zen of Python\u003c/h2\u003e\n\u003cp\u003e(by Tim Peters)\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cdiv class=\"line-block\"\u003e\n\u003cdiv class=\"line\"\u003eBeautiful is better than ugly.\u003c/div\u003e\n\u003cdiv class=\"line\"\u003eExplicit is better than implicit.\u003c/div\u003e\n\u003cdiv class=\"line\"\u003eSimple is better than complex.\u003c/div\u003e\n\u003cdiv class=\"line\"\u003eComplex is better than complicated.\u003c/div\u003e\n\u003cdiv class=\"line\"\u003eFlat is better than nested.\u003c/div\u003e\n\u003cdiv class=\"line\"\u003eSparse is better than dense.\u003c/div\u003e\n\u003cdiv class=\"line\"\u003eReadability counts.\u003c/div\u003e\n\u003cdiv class=\"line\"\u003eSpecial cases aren't special enough to break the rules.\u003c/div\u003e\n\u003cdiv class=\"line\"\u003eAlthough practicality beats purity.\u003c/div\u003e\n\u003cdiv class=\"line\"\u003e\u003cstrong\u003eErrors should never pass silently.\u003c/strong\u003e\u003c/div\u003e\n\u003cdiv class=\"line\"\u003e\u003cstrong\u003eUnless explicitly silenced.\u003c/strong\u003e\u003c/div\u003e\n\u003cdiv class=\"line\"\u003eIn the face of ambiguity, refuse the temptation to guess.\u003c/div\u003e\n\u003cdiv class=\"line\"\u003eThere should be one-- and preferably only one --obvious way to do it.\u003c/div\u003e\n\u003cdiv class=\"line\"\u003eAlthough that way may not be obvious at first unless you're Dutch.\u003c/div\u003e\n\u003cdiv class=\"line\"\u003eNow is better than never.\u003c/div\u003e\n\u003cdiv class=\"line\"\u003eAlthough never is often better than \u003cem\u003eright\u003c/em\u003e now.\u003c/div\u003e\n\u003cdiv class=\"line\"\u003eIf the implementation is hard to explain, it's a bad idea.\u003c/div\u003e\n\u003cdiv class=\"line\"\u003eIf the implementation is easy to explain, it may be a good idea.\u003c/div\u003e\n\u003cdiv class=\"line\"\u003eNamespaces are one honking great idea -- let's do more of those!\u003c/div\u003e\n\u003c/div\u003e\n\u003c/blockquote\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"catch-me-if-you-can\"\u003e\n\u003ch2\u003e5.2\u0026nbsp;\u0026nbsp;\u0026nbsp;Catch me if you can\u003c/h2\u003e\n\u003cp\u003eYou can catch any exception using the following structure:\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"k\"\u003etry\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"kt\"\u003efloat\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003earray\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"kt\"\u003efloat\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e];\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003cspan class=\"k\"\u003ecatch\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ebad_alloc\u003c/span\u003e \u003cspan class=\"n\"\u003ee\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ecerr\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003ee\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewhat\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eendl\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/pre\u003e\n\u003cp\u003eIf the raised exception is different from the ones you're catching, program\nwill stop.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"creating-your-own-exception\"\u003e\n\u003ch2\u003e5.3\u0026nbsp;\u0026nbsp;\u0026nbsp;Creating your own exception\u003c/h2\u003e\n\u003cp\u003eCreating a new exception is quite easy:\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"cp\"\u003e#include \u0026lt;stdexcept\u0026gt;\n\u003c/span\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eException\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"k\"\u003epublic\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eruntime_error\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003cspan class=\"k\"\u003epublic\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eException\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eruntime_error\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026quot;Exception\u0026quot;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"standard-exceptions\"\u003e\n\u003ch2\u003e5.4\u0026nbsp;\u0026nbsp;\u0026nbsp;Standard exceptions\u003c/h2\u003e\n\u003cp\u003eThere exist some standard exceptions that can be raised in some circumstances:\u003c/p\u003e\n\u003cp\u003e\u003ctt class=\"docutils literal\"\u003e#include \u0026lt;stdexcept\u0026gt;\u003c/tt\u003e\u003c/p\u003e\n\u003cul class=\"simple\"\u003e\n\u003cli\u003ebad_alloc\u003c/li\u003e\n\u003cli\u003ebad_cast\u003c/li\u003e\n\u003cli\u003ebad_exception\u003c/li\u003e\n\u003cli\u003ebad_typeid\u003c/li\u003e\n\u003cli\u003elogic_error\u003cul\u003e\n\u003cli\u003edomain_error\u003c/li\u003e\n\u003cli\u003einvalid_argument\u003c/li\u003e\n\u003cli\u003elength_error\u003c/li\u003e\n\u003cli\u003eout_of_range\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eruntime_error\u003cul\u003e\n\u003cli\u003erange_error\u003c/li\u003e\n\u003cli\u003eoverflow_error\u003c/li\u003e\n\u003cli\u003eunderflow_error\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"id2\"\u003e\n\u003ch2\u003e5.5\u0026nbsp;\u0026nbsp;\u0026nbsp;Exercices\u003c/h2\u003e\n\u003col class=\"arabic\"\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eHow to handle a constructor that fails ?\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003esolution\u003c/strong\u003e: \u003ca class=\"reference external\" href=\"sources/crash-course-5.1.cc\"\u003ecrash-course-5.1.cc\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eWrite a program that raise 3 of the standard exceptions.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003esolution\u003c/strong\u003e: \u003ca class=\"reference external\" href=\"sources/crash-course-5.2.cc\"\u003ecrash-course-5.2.cc\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eWrite a correct division function.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003esolution\u003c/strong\u003e: \u003ca class=\"reference external\" href=\"sources/crash-course-5.3.cc\"\u003ecrash-course-5.3.cc\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eWrite a \u003ctt class=\"docutils literal\"\u003eInteger\u003c/tt\u003e (positive) class with proper exception handling\n(\u003ctt class=\"docutils literal\"\u003eOverflow\u003c/tt\u003e, \u003ctt class=\"docutils literal\"\u003eUnderflow\u003c/tt\u003e, \u003ctt class=\"docutils literal\"\u003eDivideByZero\u003c/tt\u003e, etc.)\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003esolution\u003c/strong\u003e: \u003ca class=\"reference external\" href=\"sources/crash-course-5.4.cc\"\u003ecrash-course-5.4.cc\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"streams\"\u003e\n\u003ch1\u003e6\u0026nbsp;\u0026nbsp;\u0026nbsp;Streams\u003c/h1\u003e\n\u003cp\u003eC++ provides input/output capability throught the iostream classes that provide\nthe stream concept (iXXXstream for input and oXXXstream for output).\u003c/p\u003e\n\u003cdiv class=\"section\" id=\"iostream-and-ios\"\u003e\n\u003ch2\u003e6.1\u0026nbsp;\u0026nbsp;\u0026nbsp;iostream and ios\u003c/h2\u003e\n\u003cp\u003eScreen outputs and keyboard inputs may be handled using the iostream header\nfile:\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"cp\"\u003e#include \u0026lt;iostream\u0026gt;\n\u003c/span\u003e\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003emain\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eargc\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003echar\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003eargv\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\n    \u003cspan class=\"kt\"\u003eunsigned\u003c/span\u003e \u003cspan class=\"kt\"\u003echar\u003c/span\u003e \u003cspan class=\"n\"\u003eage\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e65\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"k\"\u003estatic_cast\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"kt\"\u003eunsigned\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eage\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e     \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eendl\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"k\"\u003estatic_cast\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"k\"\u003econst\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e\u003cspan class=\"n\"\u003eage\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eendl\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\n    \u003cspan class=\"kt\"\u003edouble\u003c/span\u003e \u003cspan class=\"n\"\u003ef\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mf\"\u003e3.14159\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003ecout\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eunsetf\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eios\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003efloatfield\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n    \u003cspan class=\"n\"\u003ecout\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eprecision\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n    \u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003ef\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003eendl\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003ecout\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eprecision\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e10\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n    \u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003ef\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003eendl\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003ecout\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esetf\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eios\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003efixed\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003eios\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003efloatfield\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n    \u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003ef\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003eendl\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\n    \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026quot;Enter a number, or -1 to quit: \u0026quot;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003ei\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"k\"\u003ewhile\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ecin\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003ei\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"k\"\u003ebreak\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026quot;You entered \u0026quot;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003ei\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"sc\"\u003e'\\n'\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"class-input-output\"\u003e\n\u003ch2\u003e6.2\u0026nbsp;\u0026nbsp;\u0026nbsp;Class input/output\u003c/h2\u003e\n\u003cp\u003eYou can implement a class input and output using friends functions:\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"cp\"\u003e#include \u0026lt;iostream\u0026gt;\n\u003c/span\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eFoo\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003cspan class=\"k\"\u003epublic\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\n    \u003cspan class=\"k\"\u003efriend\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eostream\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"k\"\u003eoperator\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eostream\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"n\"\u003eoutput\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e \u003cspan class=\"k\"\u003econst\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"n\"\u003ethat\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eoutput\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003ethat\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003e_value\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"k\"\u003efriend\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eistream\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"k\"\u003eoperator\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eistream\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"n\"\u003einput\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"n\"\u003efoo\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003einput\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003efred\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003e_value\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\n\u003cspan class=\"k\"\u003eprivate\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\n    \u003cspan class=\"kt\"\u003edouble\u003c/span\u003e \u003cspan class=\"n\"\u003e_value\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"working-with-files\"\u003e\n\u003ch2\u003e6.3\u0026nbsp;\u0026nbsp;\u0026nbsp;Working with files\u003c/h2\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"cp\"\u003e#include \u0026lt;fstream\u0026gt;\n\u003c/span\u003e\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003emain\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eargc\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003echar\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003eargv\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eifstream\u003c/span\u003e \u003cspan class=\"n\"\u003einput\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"n\"\u003efilename\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n    \u003cspan class=\"c1\"\u003e// std::ifstream input( filename, std::ios::in | std::ios::binary);\n\u003c/span\u003e\n    \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eofstream\u003c/span\u003e \u003cspan class=\"n\"\u003eoutput\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"n\"\u003efilename\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n    \u003cspan class=\"c1\"\u003e// std::ofstream output( filename, std::ios::out | std::ios::binary);\n\u003c/span\u003e\n    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"working-with-strings\"\u003e\n\u003ch2\u003e6.4\u0026nbsp;\u0026nbsp;\u0026nbsp;Working with strings\u003c/h2\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"cp\"\u003e#include \u0026lt;sstream\u0026gt;\n\u003c/span\u003e\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003emain\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eargc\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003echar\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003eargv\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"k\"\u003econst\u003c/span\u003e \u003cspan class=\"kt\"\u003echar\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003esvalue\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026quot;42.0\u0026quot;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eivalue\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eistringstream\u003c/span\u003e \u003cspan class=\"n\"\u003eistream\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eostringstream\u003c/span\u003e \u003cspan class=\"n\"\u003eostream\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\n    \u003cspan class=\"n\"\u003eistream\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esvalue\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eistream\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eivalue\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003esvalue\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026quot; = \u0026quot;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003eivalue\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eendl\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\n    \u003cspan class=\"n\"\u003eostream\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eclear\u003c/span\u003e\u003cspan class=\"p\"\u003e();\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eostream\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003eivalue\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003eivalue\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026quot; = \u0026quot;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003eostream\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eendl\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\n    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"id3\"\u003e\n\u003ch2\u003e6.5\u0026nbsp;\u0026nbsp;\u0026nbsp;Exercices\u003c/h2\u003e\n\u003col class=\"arabic simple\"\u003e\n\u003cli\u003eWrite an \u003ctt class=\"docutils literal\"\u003eitoa\u003c/tt\u003e and an \u003ctt class=\"docutils literal\"\u003eatoi\u003c/tt\u003e function\u003c/li\u003e\n\u003cli\u003eWrite a foo class with some attributes and write functions for writing to\nfile and reading from file.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"templates\"\u003e\n\u003ch1\u003e7\u0026nbsp;\u0026nbsp;\u0026nbsp;Templates\u003c/h1\u003e\n\u003cp\u003eTemplates are special operators that specify that a class or a function is\nwritten for one or several generic types that are not yet known. The format for\ndeclaring function templates is:\u003c/p\u003e\n\u003cul class=\"simple\"\u003e\n\u003cli\u003etemplate \u0026lt;typename identifier\u0026gt; function_declaration;\u003c/li\u003e\n\u003cli\u003etemplate \u0026lt;typename identifier\u0026gt; class_declaration;\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eYou can have several templates and to actually use a class or function\ntemplate, you have to specify all unknown types:\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"k\"\u003etemplate\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"k\"\u003etypename\u003c/span\u003e \u003cspan class=\"n\"\u003eT1\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003cspan class=\"n\"\u003eT1\u003c/span\u003e \u003cspan class=\"n\"\u003efoo1\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"cm\"\u003e/* ... */\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\n\u003cspan class=\"k\"\u003etemplate\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"k\"\u003etypename\u003c/span\u003e \u003cspan class=\"n\"\u003eT1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"k\"\u003etypename\u003c/span\u003e \u003cspan class=\"n\"\u003eT2\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003cspan class=\"n\"\u003eT1\u003c/span\u003e \u003cspan class=\"n\"\u003efoo2\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"cm\"\u003e/* ... */\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\n\u003cspan class=\"k\"\u003etemplate\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"k\"\u003etypename\u003c/span\u003e \u003cspan class=\"n\"\u003eT1\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eFoo3\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"cm\"\u003e/* ... */\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\n\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efoo1\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"kt\"\u003eint\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e();\u003c/span\u003e\n\u003cspan class=\"kt\"\u003efloat\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efoo2\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"kt\"\u003eint\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"kt\"\u003efloat\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e();\u003c/span\u003e\n\u003cspan class=\"n\"\u003eFoo\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"kt\"\u003eint\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/pre\u003e\n\u003cdiv class=\"section\" id=\"template-parameters\"\u003e\n\u003ch2\u003e7.1\u0026nbsp;\u0026nbsp;\u0026nbsp;Template parameters\u003c/h2\u003e\n\u003cp\u003eThere are three possible template types:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003e\u003cstrong\u003eType\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"k\"\u003etemplate\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"k\"\u003etypename\u003c/span\u003e \u003cspan class=\"n\"\u003eT\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e  \u003cspan class=\"n\"\u003eT\u003c/span\u003e \u003cspan class=\"n\"\u003efoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"cm\"\u003e/* ... */\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003e\u003cstrong\u003eNon-type\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"k\"\u003etemplate\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eN\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e  \u003cspan class=\"n\"\u003efoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"cm\"\u003e/* ... */\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003e\u003cstrong\u003eTemplate\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"k\"\u003etemplate\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"k\"\u003etemplate\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"k\"\u003etypename\u003c/span\u003e \u003cspan class=\"n\"\u003eT\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003efoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"cm\"\u003e/* ... */\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"template-function\"\u003e\n\u003ch2\u003e7.2\u0026nbsp;\u0026nbsp;\u0026nbsp;Template function\u003c/h2\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"k\"\u003etemplate\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eT\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003cspan class=\"n\"\u003eT\u003c/span\u003e \u003cspan class=\"n\"\u003emax\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"n\"\u003eT\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eT\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e \u003cspan class=\"o\"\u003e?\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003cspan class=\"cp\"\u003e\n#include \u0026lt;sstream\u0026gt;\n\u003c/span\u003e\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003emain\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eargc\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003echar\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003eargv\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003emax\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"kt\"\u003eint\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"mf\"\u003e2.2\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mf\"\u003e2.5\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eendl\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003emax\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"kt\"\u003efloat\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"mf\"\u003e2.2\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mf\"\u003e2.5\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eendl\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"template-class\"\u003e\n\u003ch2\u003e7.3\u0026nbsp;\u0026nbsp;\u0026nbsp;Template class\u003c/h2\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"k\"\u003etemplate\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eT\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eFoo\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eT\u003c/span\u003e \u003cspan class=\"n\"\u003e_value\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"k\"\u003epublic\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"n\"\u003eT\u003c/span\u003e \u003cspan class=\"n\"\u003evalue\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003e_value\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003emain\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eargc\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003echar\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003eargv\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"kt\"\u003eint\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003efoo_int\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"kt\"\u003efloat\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003efoo_float\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"template-specialization\"\u003e\n\u003ch2\u003e7.4\u0026nbsp;\u0026nbsp;\u0026nbsp;Template specialization\u003c/h2\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"cp\"\u003e#include \u0026lt;iostream\u0026gt;\n\u003c/span\u003e\n\u003cspan class=\"k\"\u003etemplate\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eT\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eFoo\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eT\u003c/span\u003e \u003cspan class=\"n\"\u003e_value\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"k\"\u003epublic\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"n\"\u003eT\u003c/span\u003e \u003cspan class=\"n\"\u003evalue\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003e_value\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026quot;Generic constructor called\u0026quot;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eendl\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\n\u003cspan class=\"k\"\u003etemplate\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026gt;\u003c/span\u003e\n\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eFoo\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"kt\"\u003efloat\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"kt\"\u003efloat\u003c/span\u003e \u003cspan class=\"n\"\u003e_value\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"k\"\u003epublic\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003efloat\u003c/span\u003e \u003cspan class=\"n\"\u003evalue\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003e_value\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026quot;Specialized constructor called\u0026quot;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eendl\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003emain\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eargc\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003echar\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003eargv\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"kt\"\u003eint\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003efoo_int\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"kt\"\u003efloat\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003efoo_float\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"id4\"\u003e\n\u003ch2\u003e7.5\u0026nbsp;\u0026nbsp;\u0026nbsp;Exercices\u003c/h2\u003e\n\u003col class=\"arabic simple\"\u003e\n\u003cli\u003eWrite a generic swap function\u003c/li\u003e\n\u003cli\u003eWrite a generic point structure\u003c/li\u003e\n\u003cli\u003eWrite templated factorial, power and exponential functions\n(exp(x)  = sum_n x^n/n!, exp(-x) = 1/exp(x))\u003c/li\u003e\n\u003cli\u003eWrite a smart pointer class\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"standard-template-library\"\u003e\n\u003ch1\u003e8\u0026nbsp;\u0026nbsp;\u0026nbsp;Standard Template Library\u003c/h1\u003e\n\u003cdiv class=\"section\" id=\"containers\"\u003e\n\u003ch2\u003e8.1\u0026nbsp;\u0026nbsp;\u0026nbsp;Containers\u003c/h2\u003e\n\u003cp\u003eSTL containers are template classes that implement various ways of storing\nelements and accessing them.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eSequence containers\u003c/strong\u003e:\u003c/p\u003e\n\u003cul class=\"simple\"\u003e\n\u003cli\u003evector\u003c/li\u003e\n\u003cli\u003edeque\u003c/li\u003e\n\u003cli\u003elist\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eContainer adaptors\u003c/strong\u003e:\u003c/p\u003e\n\u003cul class=\"simple\"\u003e\n\u003cli\u003estack\u003c/li\u003e\n\u003cli\u003equeue\u003c/li\u003e\n\u003cli\u003epriority_queue\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAssociative containers\u003c/strong\u003e:\u003c/p\u003e\n\u003cul class=\"simple\"\u003e\n\u003cli\u003eset\u003c/li\u003e\n\u003cli\u003emultiset\u003c/li\u003e\n\u003cli\u003emap\u003c/li\u003e\n\u003cli\u003emultimap\u003c/li\u003e\n\u003cli\u003ebitset\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eSee \u003ca class=\"reference external\" href=\"http://www.cplusplus.com/reference/stl/\"\u003ehttp://www.cplusplus.com/reference/stl/\u003c/a\u003e for more information.\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"cp\"\u003e#include \u0026lt;vector\u0026gt;\n#include \u0026lt;map\u0026gt;\n#include \u0026lt;string\u0026gt;\n\u003c/span\u003e\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003emain\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eargc\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003echar\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003eargv\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003evector\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"kt\"\u003eint\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003ev\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003ev\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epush_back\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n    \u003cspan class=\"n\"\u003ev\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epush_back\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n    \u003cspan class=\"n\"\u003ev\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epush_back\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\n    \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003emap\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003estring\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"kt\"\u003eint\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003em\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003em\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026quot;one\u0026quot;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003em\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026quot;two\u0026quot;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003em\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026quot;three\u0026quot;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\n    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"iterators\"\u003e\n\u003ch2\u003e8.2\u0026nbsp;\u0026nbsp;\u0026nbsp;Iterators\u003c/h2\u003e\n\u003cp\u003eIterators are a convebient tool to iterate over a container:\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"cp\"\u003e#include \u0026lt;map\u0026gt;\n#include \u0026lt;string\u0026gt;\n#include \u0026lt;iostream\u0026gt;\n\u003c/span\u003e\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003emain\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eargc\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003echar\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003eargv\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003emap\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003estring\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"kt\"\u003eint\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003em\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003em\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026quot;one\u0026quot;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003em\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026quot;two\u0026quot;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"n\"\u003em\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026quot;three\u0026quot;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\n    \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003emap\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003estring\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"kt\"\u003eint\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;::\u003c/span\u003e\u003cspan class=\"n\"\u003eiterator\u003c/span\u003e \u003cspan class=\"n\"\u003eiter\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"k\"\u003efor\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"n\"\u003eiter\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003em\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ebegin\u003c/span\u003e\u003cspan class=\"p\"\u003e();\u003c/span\u003e \u003cspan class=\"n\"\u003eiter\u003c/span\u003e \u003cspan class=\"o\"\u003e!=\u003c/span\u003e \u003cspan class=\"n\"\u003em\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eend\u003c/span\u003e\u003cspan class=\"p\"\u003e();\u003c/span\u003e \u003cspan class=\"o\"\u003e++\u003c/span\u003e\u003cspan class=\"n\"\u003eiter\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026quot;map[\u0026quot;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003eiter\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003efirst\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026quot;] = \u0026quot;\u003c/span\u003e\n                  \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003eiter\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003esecond\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eendl\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"algorithms\"\u003e\n\u003ch2\u003e8.3\u0026nbsp;\u0026nbsp;\u0026nbsp;Algorithms\u003c/h2\u003e\n\u003cp\u003eAlgorithms from the STL offer fast, robust, tested and maintained code for a lot\nof standard operations on ranged elements. Don't reinvent the wheel !\u003c/p\u003e\n\u003cp\u003eHave a look at \u003ca class=\"reference external\" href=\"http://r0d.developpez.com/articles/algos-stl-fr/\"\u003ehttp://r0d.developpez.com/articles/algos-stl-fr/\u003c/a\u003e (French) and\n\u003ca class=\"reference external\" href=\"http://www.cplusplus.com/reference/algorithm/\"\u003ehttp://www.cplusplus.com/reference/algorithm/\u003c/a\u003e for an overview.\u003c/p\u003e\n\u003cpre class=\"code c++ literal-block\"\u003e\n\u003cspan class=\"cp\"\u003e#include \u0026lt;vector\u0026gt;\n#include \u0026lt;algorithm\u0026gt;\n\u003c/span\u003e\n\u003cspan class=\"kt\"\u003ebool\u003c/span\u003e \u003cspan class=\"n\"\u003ecompare\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"k\"\u003econst\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"n\"\u003efirst\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"k\"\u003econst\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e  \u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"n\"\u003esecond\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efirst\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003esecond\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\n\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003emain\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eargc\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003echar\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003eargv\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003evector\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"kt\"\u003eint\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003ev\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e10\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n    \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003esort\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ev\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ebegin\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003cspan class=\"n\"\u003ev\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eend\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e\u003cspan class=\"n\"\u003ecompare\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\n    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"id5\"\u003e\n\u003ch2\u003e8.4\u0026nbsp;\u0026nbsp;\u0026nbsp;Exercices\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003col class=\"arabic simple\"\u003e\n\u003cli\u003eWrite a template stack class using the STL vector class\u003c/li\u003e\n\u003cli\u003eWrite a generic vector class with iterators and benchmark it againt the STL\nvector class\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/blockquote\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"external-links\"\u003e\n\u003ch1\u003e9\u0026nbsp;\u0026nbsp;\u0026nbsp;External links\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cdiv class=\"first line-block\"\u003e\n\u003cdiv class=\"line\"\u003eC++ FAQ — Frequently Asked Questions\u003c/div\u003e\n\u003cdiv class=\"line\"\u003e\u003ca class=\"reference external\" href=\"http://www.parashift.com/c++-faq-lite/\"\u003ehttp://www.parashift.com/c++-faq-lite/\u003c/a\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdiv class=\"first line-block\"\u003e\n\u003cdiv class=\"line\"\u003eBoost free peer-reviewed portable C++ source libraries\u003c/div\u003e\n\u003cdiv class=\"line\"\u003e\u003ca class=\"reference external\" href=\"http://www.boost.org/\"\u003ehttp://www.boost.org/\u003c/a\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdiv class=\"first line-block\"\u003e\n\u003cdiv class=\"line\"\u003eBjarne Stroustrup homepage\u003c/div\u003e\n\u003cdiv class=\"line\"\u003e\u003ca class=\"reference external\" href=\"http://www2.research.att.com/~bs/\"\u003ehttp://www2.research.att.com/~bs/\u003c/a\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdiv class=\"first line-block\"\u003e\n\u003cdiv class=\"line\"\u003eComplete reference on C++ Standard Library\u003c/div\u003e\n\u003cdiv class=\"line\"\u003e\u003ca class=\"reference external\" href=\"http://en.cppreference.com/w/cpp\"\u003ehttp://en.cppreference.com/w/cpp\u003c/a\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdiv class=\"first line-block\"\u003e\n\u003cdiv class=\"line\"\u003eC++11 main features\u003c/div\u003e\n\u003cdiv class=\"line\"\u003e\u003ca class=\"reference external\" href=\"http://en.wikipedia.org/wiki/C%2B%2B11\"\u003ehttp://en.wikipedia.org/wiki/C%2B%2B11\u003c/a\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdiv class=\"first line-block\"\u003e\n\u003cdiv class=\"line\"\u003eThe definitive C++ book guide\u003c/div\u003e\n\u003cdiv class=\"line\"\u003e\u003ca class=\"reference external\" href=\"http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list\"\u003ehttp://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list\u003c/a\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdiv class=\"first line-block\"\u003e\n\u003cdiv class=\"line\"\u003ecomp.lang.c++\u003c/div\u003e\n\u003cdiv class=\"line\"\u003e\u003ca class=\"reference external\" href=\"http://groups.google.com/group/comp.lang.c++/topics\"\u003ehttp://groups.google.com/group/comp.lang.c++/topics\u003c/a\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdiv class=\"first line-block\"\u003e\n\u003cdiv class=\"line\"\u003eGNU make\u003c/div\u003e\n\u003cdiv class=\"line\"\u003e\u003ca class=\"reference external\" href=\"http://www.gnu.org/s/make/manual/make.html\"\u003ehttp://www.gnu.org/s/make/manual/make.html\u003c/a\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdiv class=\"first line-block\"\u003e\n\u003cdiv class=\"line\"\u003eLes meilleurs cours et tutoriaux (in \u003cstrong\u003eFrench\u003c/strong\u003e as you may have already guessed...)\u003c/div\u003e\n\u003cdiv class=\"line\"\u003e\u003ca class=\"reference external\" href=\"http://cpp.developpez.com/cours/\"\u003ehttp://cpp.developpez.com/cours/\u003c/a\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frougier%2Fcpp-crash-course","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frougier%2Fcpp-crash-course","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frougier%2Fcpp-crash-course/lists"}