CINXE.COM
C++ - Wikipedia, la enciclopedia libre
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available" lang="es" dir="ltr"> <head> <meta charset="UTF-8"> <title>C++ - Wikipedia, la enciclopedia libre</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available";var cookie=document.cookie.match(/(?:^|; )eswikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":[",\t."," \t,"],"wgDigitTransformTable":["",""], "wgDefaultDateFormat":"dmy","wgMonthNames":["","enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],"wgRequestId":"4517e829-a183-4963-ad19-03a86109b7f7","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"C++","wgTitle":"C++","wgCurRevisionId":163494424,"wgRevisionId":163494424,"wgArticleId":618,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Wikipedia:Artículos con identificadores BNE","Wikipedia:Artículos con identificadores BNF","Wikipedia:Artículos con identificadores GND","Wikipedia:Artículos con identificadores LCCN","Wikipedia:Páginas con enlaces mágicos de ISBN","C++"],"wgPageViewLanguage":"es","wgPageContentLanguage":"es","wgPageContentModel":"wikitext","wgRelevantPageName":"C++","wgRelevantArticleId":618,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[], "wgRestrictionMove":[],"wgRedirectedFrom":"C_Más_Más","wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":false,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"es","pageLanguageDir":"ltr","pageVariantFallbacks":"es"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":true,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":60000,"wgInternalRedirectTargetUrl":"/wiki/C%2B%2B","wgRelatedArticlesCompat":[],"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q2407","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":true, "wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.gadget.imagenesinfobox":"ready","ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.cite.styles":"ready","ext.pygments":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["mediawiki.action.view.redirect","ext.cite.ux-enhancements","ext.pygments.view","mediawiki.page.media","site","mediawiki.page.ready","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.gadget.a-commons-directo","ext.gadget.ReferenceTooltips","ext.gadget.refToolbar","ext.gadget.switcher", "ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.cx.uls.quick.actions","wikibase.client.vector-2022","ext.checkUser.clientHints","ext.quicksurveys.init","ext.growthExperiments.SuggestedEditSession","wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=es&modules=ext.cite.styles%7Cext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=es&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=es&modules=ext.gadget.imagenesinfobox&only=styles&skin=vector-2022"> <link rel="stylesheet" href="/w/load.php?lang=es&modules=site.styles&only=styles&skin=vector-2022"> <noscript><link rel="stylesheet" href="/w/load.php?lang=es&modules=noscript&only=styles&skin=vector-2022"></noscript> <meta name="generator" content="MediaWiki 1.44.0-wmf.5"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/ISO_C%2B%2B_Logo.svg/1200px-ISO_C%2B%2B_Logo.svg.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="1349"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/ISO_C%2B%2B_Logo.svg/800px-ISO_C%2B%2B_Logo.svg.png"> <meta property="og:image:width" content="800"> <meta property="og:image:height" content="899"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/ISO_C%2B%2B_Logo.svg/640px-ISO_C%2B%2B_Logo.svg.png"> <meta property="og:image:width" content="640"> <meta property="og:image:height" content="719"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="C++ - Wikipedia, la enciclopedia libre"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//es.m.wikipedia.org/wiki/C%2B%2B"> <link rel="alternate" type="application/x-wiki" title="Editar" href="/w/index.php?title=C%2B%2B&action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (es)"> <link rel="EditURI" type="application/rsd+xml" href="//es.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://es.wikipedia.org/wiki/C%2B%2B"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.es"> <link rel="alternate" type="application/atom+xml" title="Canal Atom de Wikipedia" href="/w/index.php?title=Especial:CambiosRecientes&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-C rootpage-C skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Ir al contenido</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Sitio"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Menú principal" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Menú principal</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Menú principal</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">mover a la barra lateral</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">ocultar</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navegación </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Wikipedia:Portada" title="Visitar la página principal [z]" accesskey="z"><span>Portada</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Portal:Comunidad" title="Acerca del proyecto, lo que puedes hacer, dónde encontrar información"><span>Portal de la comunidad</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Portal:Actualidad" title="Encuentra información de contexto sobre acontecimientos actuales"><span>Actualidad</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Especial:CambiosRecientes" title="Lista de cambios recientes en la wiki [r]" accesskey="r"><span>Cambios recientes</span></a></li><li id="n-newpages" class="mw-list-item"><a href="/wiki/Especial:P%C3%A1ginasNuevas"><span>Páginas nuevas</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Especial:Aleatoria" title="Cargar una página al azar [x]" accesskey="x"><span>Página aleatoria</span></a></li><li id="n-help" class="mw-list-item"><a href="/wiki/Ayuda:Contenidos" title="El lugar para aprender"><span>Ayuda</span></a></li><li id="n-bug_in_article" class="mw-list-item"><a href="/wiki/Wikipedia:Informes_de_error"><span>Notificar un error</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Wikipedia:Portada" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikipedia" src="/static/images/mobile/copyright/wikipedia-wordmark-en.svg" style="width: 7.5em; height: 1.125em;"> <img class="mw-logo-tagline" alt="La enciclopedia libre" src="/static/images/mobile/copyright/wikipedia-tagline-es.svg" width="120" height="13" style="width: 7.5em; height: 0.8125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Especial:Buscar" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Buscar en este wiki [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Buscar</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Buscar en Wikipedia" aria-label="Buscar en Wikipedia" autocapitalize="sentences" title="Buscar en este wiki [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Especial:Buscar"> </div> <button class="cdx-button cdx-search-input__end-button">Buscar</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Herramientas personales"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Apariencia"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Apariencia" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Apariencia</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_es.wikipedia.org&uselang=es" class=""><span>Donaciones</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Especial:Crear_una_cuenta&returnto=C%2B%2B" title="Te recomendamos crear una cuenta e iniciar sesión; sin embargo, no es obligatorio" class=""><span>Crear una cuenta</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Especial:Entrar&returnto=C%2B%2B" title="Te recomendamos iniciar sesión, aunque no es obligatorio [o]" accesskey="o" class=""><span>Acceder</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Más opciones" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Herramientas personales" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Herramientas personales</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="Menú de usuario" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_es.wikipedia.org&uselang=es"><span>Donaciones</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Especial:Crear_una_cuenta&returnto=C%2B%2B" title="Te recomendamos crear una cuenta e iniciar sesión; sin embargo, no es obligatorio"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Crear una cuenta</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Especial:Entrar&returnto=C%2B%2B" title="Te recomendamos iniciar sesión, aunque no es obligatorio [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Acceder</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Páginas para editores desconectados <a href="/wiki/Ayuda:Introducci%C3%B3n" aria-label="Obtenga más información sobre editar"><span>más información</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Especial:MisContribuciones" title="Una lista de modificaciones hechas desde esta dirección IP [y]" accesskey="y"><span>Contribuciones</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Especial:MiDiscusi%C3%B3n" title="Discusión sobre ediciones hechas desde esta dirección IP [n]" accesskey="n"><span>Discusión</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Sitio"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contenidos" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contenidos</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">mover a la barra lateral</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">ocultar</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">Inicio</div> </a> </li> <li id="toc-Características_de_C++" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Características_de_C++"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Características de C++</span> </div> </a> <ul id="toc-Características_de_C++-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Ejemplos" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Ejemplos"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Ejemplos</span> </div> </a> <ul id="toc-Ejemplos-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Tipos_de_datos" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Tipos_de_datos"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Tipos de datos</span> </div> </a> <button aria-controls="toc-Tipos_de_datos-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Alternar subsección Tipos de datos</span> </button> <ul id="toc-Tipos_de_datos-sublist" class="vector-toc-list"> <li id="toc-Tamaños_asociados" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Tamaños_asociados"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1</span> <span><i>Tamaños asociados</i></span> </div> </a> <ul id="toc-Tamaños_asociados-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Wchar_t" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Wchar_t"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.2</span> <span>Wchar_t</span> </div> </a> <ul id="toc-Wchar_t-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-La_palabra_reservada_«void»" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#La_palabra_reservada_«void»"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.3</span> <span>La palabra reservada «void»</span> </div> </a> <ul id="toc-La_palabra_reservada_«void»-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-La_palabra_«NULL»" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#La_palabra_«NULL»"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.4</span> <span>La palabra «NULL»</span> </div> </a> <ul id="toc-La_palabra_«NULL»-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Principios" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Principios"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Principios</span> </div> </a> <ul id="toc-Principios-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-El_concepto_de_clase" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#El_concepto_de_clase"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>El concepto de clase</span> </div> </a> <button aria-controls="toc-El_concepto_de_clase-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Alternar subsección El concepto de clase</span> </button> <ul id="toc-El_concepto_de_clase-sublist" class="vector-toc-list"> <li id="toc-Constructores" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Constructores"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.1</span> <span>Constructores</span> </div> </a> <ul id="toc-Constructores-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Destructores" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Destructores"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.2</span> <span>Destructores</span> </div> </a> <ul id="toc-Destructores-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Funciones_miembro" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Funciones_miembro"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.3</span> <span>Funciones miembro</span> </div> </a> <ul id="toc-Funciones_miembro-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Funciones_amigas" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Funciones_amigas"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.4</span> <span>Funciones amigas</span> </div> </a> <ul id="toc-Funciones_amigas-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Plantillas" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Plantillas"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.5</span> <span>Plantillas</span> </div> </a> <ul id="toc-Plantillas-sublist" class="vector-toc-list"> <li id="toc-Especialización" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Especialización"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.5.1</span> <span>Especialización</span> </div> </a> <ul id="toc-Especialización-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Clases_abstractas" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Clases_abstractas"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.6</span> <span>Clases abstractas</span> </div> </a> <ul id="toc-Clases_abstractas-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Espacios_de_nombres" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Espacios_de_nombres"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.7</span> <span>Espacios de nombres</span> </div> </a> <ul id="toc-Espacios_de_nombres-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Herencia" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Herencia"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.8</span> <span>Herencia</span> </div> </a> <ul id="toc-Herencia-sublist" class="vector-toc-list"> <li id="toc-Herencia_simple" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Herencia_simple"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.8.1</span> <span>Herencia simple</span> </div> </a> <ul id="toc-Herencia_simple-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Herencia_múltiple" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Herencia_múltiple"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.8.2</span> <span>Herencia múltiple</span> </div> </a> <ul id="toc-Herencia_múltiple-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Sobrecarga_de_operadores" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Sobrecarga_de_operadores"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.9</span> <span>Sobrecarga de operadores</span> </div> </a> <ul id="toc-Sobrecarga_de_operadores-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Standard_Template_Library_(STL)" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Standard_Template_Library_(STL)"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>Standard Template Library (STL)</span> </div> </a> <ul id="toc-Standard_Template_Library_(STL)-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Biblioteca_de_entrada_y_salida" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Biblioteca_de_entrada_y_salida"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>Biblioteca de entrada y salida</span> </div> </a> <button aria-controls="toc-Biblioteca_de_entrada_y_salida-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Alternar subsección Biblioteca de entrada y salida</span> </button> <ul id="toc-Biblioteca_de_entrada_y_salida-sublist" class="vector-toc-list"> <li id="toc-Fstreams" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Fstreams"> <div class="vector-toc-text"> <span class="vector-toc-numb">7.1</span> <span>Fstreams</span> </div> </a> <ul id="toc-Fstreams-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Sstreams" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Sstreams"> <div class="vector-toc-text"> <span class="vector-toc-numb">7.2</span> <span>Sstreams</span> </div> </a> <ul id="toc-Sstreams-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Contenedores" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Contenedores"> <div class="vector-toc-text"> <span class="vector-toc-numb">7.3</span> <span>Contenedores</span> </div> </a> <ul id="toc-Contenedores-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Iteradores" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Iteradores"> <div class="vector-toc-text"> <span class="vector-toc-numb">7.4</span> <span>Iteradores</span> </div> </a> <ul id="toc-Iteradores-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Algoritmos" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Algoritmos"> <div class="vector-toc-text"> <span class="vector-toc-numb">7.5</span> <span>Algoritmos</span> </div> </a> <ul id="toc-Algoritmos-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-C++11" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#C++11"> <div class="vector-toc-text"> <span class="vector-toc-numb">8</span> <span>C++11</span> </div> </a> <ul id="toc-C++11-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Actualidad_y_futuro" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Actualidad_y_futuro"> <div class="vector-toc-text"> <span class="vector-toc-numb">9</span> <span>Actualidad y futuro</span> </div> </a> <ul id="toc-Actualidad_y_futuro-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Diferencias_de_tipos_respecto_a_C" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Diferencias_de_tipos_respecto_a_C"> <div class="vector-toc-text"> <span class="vector-toc-numb">10</span> <span>Diferencias de tipos respecto a C</span> </div> </a> <ul id="toc-Diferencias_de_tipos_respecto_a_C-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Compiladores" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Compiladores"> <div class="vector-toc-text"> <span class="vector-toc-numb">11</span> <span>Compiladores</span> </div> </a> <ul id="toc-Compiladores-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Entornos_de_desarrollo" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Entornos_de_desarrollo"> <div class="vector-toc-text"> <span class="vector-toc-numb">12</span> <span>Entornos de desarrollo</span> </div> </a> <button aria-controls="toc-Entornos_de_desarrollo-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Alternar subsección Entornos de desarrollo</span> </button> <ul id="toc-Entornos_de_desarrollo-sublist" class="vector-toc-list"> <li id="toc-Bajo_Microsoft_Windows" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Bajo_Microsoft_Windows"> <div class="vector-toc-text"> <span class="vector-toc-numb">12.1</span> <span>Bajo Microsoft Windows</span> </div> </a> <ul id="toc-Bajo_Microsoft_Windows-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Bajo_MacOS" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Bajo_MacOS"> <div class="vector-toc-text"> <span class="vector-toc-numb">12.2</span> <span>Bajo MacOS</span> </div> </a> <ul id="toc-Bajo_MacOS-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Bajo_DOS" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Bajo_DOS"> <div class="vector-toc-text"> <span class="vector-toc-numb">12.3</span> <span>Bajo DOS</span> </div> </a> <ul id="toc-Bajo_DOS-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Bajo_GNU/Linux" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Bajo_GNU/Linux"> <div class="vector-toc-text"> <span class="vector-toc-numb">12.4</span> <span>Bajo GNU/Linux</span> </div> </a> <ul id="toc-Bajo_GNU/Linux-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Software_Creados_y_Programados_con_C++" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Software_Creados_y_Programados_con_C++"> <div class="vector-toc-text"> <span class="vector-toc-numb">12.5</span> <span>Software Creados y Programados con C++</span> </div> </a> <ul id="toc-Software_Creados_y_Programados_con_C++-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Críticas" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Críticas"> <div class="vector-toc-text"> <span class="vector-toc-numb">13</span> <span>Críticas</span> </div> </a> <ul id="toc-Críticas-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Véase_también" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Véase_también"> <div class="vector-toc-text"> <span class="vector-toc-numb">14</span> <span>Véase también</span> </div> </a> <ul id="toc-Véase_también-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Referencias" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Referencias"> <div class="vector-toc-text"> <span class="vector-toc-numb">15</span> <span>Referencias</span> </div> </a> <button aria-controls="toc-Referencias-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Alternar subsección Referencias</span> </button> <ul id="toc-Referencias-sublist" class="vector-toc-list"> <li id="toc-Bibliografía" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Bibliografía"> <div class="vector-toc-text"> <span class="vector-toc-numb">15.1</span> <span>Bibliografía</span> </div> </a> <ul id="toc-Bibliografía-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Enlaces_externos" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Enlaces_externos"> <div class="vector-toc-text"> <span class="vector-toc-numb">16</span> <span>Enlaces externos</span> </div> </a> <ul id="toc-Enlaces_externos-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Contenidos" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Cambiar a la tabla de contenidos" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Cambiar a la tabla de contenidos</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">C++</span></h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Ir a un artículo en otro idioma. Disponible en 109 idiomas" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-109" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">109 idiomas</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-af mw-list-item"><a href="https://af.wikipedia.org/wiki/C%2B%2B" title="C++ (afrikáans)" lang="af" hreflang="af" data-title="C++" data-language-autonym="Afrikaans" data-language-local-name="afrikáans" class="interlanguage-link-target"><span>Afrikaans</span></a></li><li class="interlanguage-link interwiki-an mw-list-item"><a href="https://an.wikipedia.org/wiki/C%2B%2B" title="C++ (aragonés)" lang="an" hreflang="an" data-title="C++" data-language-autonym="Aragonés" data-language-local-name="aragonés" class="interlanguage-link-target"><span>Aragonés</span></a></li><li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wikipedia.org/wiki/%D8%B3%D9%8A%2B%2B" title="سي++ (árabe)" lang="ar" hreflang="ar" data-title="سي++" data-language-autonym="العربية" data-language-local-name="árabe" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-arz mw-list-item"><a href="https://arz.wikipedia.org/wiki/%D8%B3%D9%89%2B%2B" title="سى++ (Egyptian Arabic)" lang="arz" hreflang="arz" data-title="سى++" data-language-autonym="مصرى" data-language-local-name="Egyptian Arabic" class="interlanguage-link-target"><span>مصرى</span></a></li><li class="interlanguage-link interwiki-as mw-list-item"><a href="https://as.wikipedia.org/wiki/%E0%A6%9A%E0%A6%BF%2B%2B" title="চি++ (asamés)" lang="as" hreflang="as" data-title="চি++" data-language-autonym="অসমীয়া" data-language-local-name="asamés" class="interlanguage-link-target"><span>অসমীয়া</span></a></li><li class="interlanguage-link interwiki-ast mw-list-item"><a href="https://ast.wikipedia.org/wiki/C%2B%2B" title="C++ (asturiano)" lang="ast" hreflang="ast" data-title="C++" data-language-autonym="Asturianu" data-language-local-name="asturiano" class="interlanguage-link-target"><span>Asturianu</span></a></li><li class="interlanguage-link interwiki-az mw-list-item"><a href="https://az.wikipedia.org/wiki/C%2B%2B" title="C++ (azerbaiyano)" lang="az" hreflang="az" data-title="C++" data-language-autonym="Azərbaycanca" data-language-local-name="azerbaiyano" class="interlanguage-link-target"><span>Azərbaycanca</span></a></li><li class="interlanguage-link interwiki-azb mw-list-item"><a href="https://azb.wikipedia.org/wiki/%D8%B3%DB%8C%2B%2B" title="سی++ (South Azerbaijani)" lang="azb" hreflang="azb" data-title="سی++" data-language-autonym="تۆرکجه" data-language-local-name="South Azerbaijani" class="interlanguage-link-target"><span>تۆرکجه</span></a></li><li class="interlanguage-link interwiki-bat-smg mw-list-item"><a href="https://bat-smg.wikipedia.org/wiki/C%2B%2B" title="C++ (Samogitian)" lang="sgs" hreflang="sgs" data-title="C++" data-language-autonym="Žemaitėška" data-language-local-name="Samogitian" class="interlanguage-link-target"><span>Žemaitėška</span></a></li><li class="interlanguage-link interwiki-be mw-list-item"><a href="https://be.wikipedia.org/wiki/C%2B%2B" title="C++ (bielorruso)" lang="be" hreflang="be" data-title="C++" data-language-autonym="Беларуская" data-language-local-name="bielorruso" class="interlanguage-link-target"><span>Беларуская</span></a></li><li class="interlanguage-link interwiki-be-x-old mw-list-item"><a href="https://be-tarask.wikipedia.org/wiki/C%2B%2B" title="C++ (Belarusian (Taraškievica orthography))" lang="be-tarask" hreflang="be-tarask" data-title="C++" data-language-autonym="Беларуская (тарашкевіца)" data-language-local-name="Belarusian (Taraškievica orthography)" class="interlanguage-link-target"><span>Беларуская (тарашкевіца)</span></a></li><li class="interlanguage-link interwiki-bg mw-list-item"><a href="https://bg.wikipedia.org/wiki/C%2B%2B" title="C++ (búlgaro)" lang="bg" hreflang="bg" data-title="C++" data-language-autonym="Български" data-language-local-name="búlgaro" class="interlanguage-link-target"><span>Български</span></a></li><li class="interlanguage-link interwiki-bn mw-list-item"><a href="https://bn.wikipedia.org/wiki/%E0%A6%B8%E0%A6%BF%2B%2B" title="সি++ (bengalí)" lang="bn" hreflang="bn" data-title="সি++" data-language-autonym="বাংলা" data-language-local-name="bengalí" class="interlanguage-link-target"><span>বাংলা</span></a></li><li class="interlanguage-link interwiki-bo mw-list-item"><a href="https://bo.wikipedia.org/wiki/C%2B" title="C+ (tibetano)" lang="bo" hreflang="bo" data-title="C+" data-language-autonym="བོད་ཡིག" data-language-local-name="tibetano" class="interlanguage-link-target"><span>བོད་ཡིག</span></a></li><li class="interlanguage-link interwiki-br mw-list-item"><a href="https://br.wikipedia.org/wiki/C%2B%2B" title="C++ (bretón)" lang="br" hreflang="br" data-title="C++" data-language-autonym="Brezhoneg" data-language-local-name="bretón" class="interlanguage-link-target"><span>Brezhoneg</span></a></li><li class="interlanguage-link interwiki-bs mw-list-item"><a href="https://bs.wikipedia.org/wiki/C%2B%2B" title="C++ (bosnio)" lang="bs" hreflang="bs" data-title="C++" data-language-autonym="Bosanski" data-language-local-name="bosnio" class="interlanguage-link-target"><span>Bosanski</span></a></li><li class="interlanguage-link interwiki-bug mw-list-item"><a href="https://bug.wikipedia.org/wiki/C%2B%2B" title="C++ (buginés)" lang="bug" hreflang="bug" data-title="C++" data-language-autonym="Basa Ugi" data-language-local-name="buginés" class="interlanguage-link-target"><span>Basa Ugi</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wikipedia.org/wiki/C%2B%2B" title="C++ (catalán)" lang="ca" hreflang="ca" data-title="C++" data-language-autonym="Català" data-language-local-name="catalán" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-ckb mw-list-item"><a href="https://ckb.wikipedia.org/wiki/%D8%B3%DB%8C%2B%2B" title="سی++ (kurdo sorani)" lang="ckb" hreflang="ckb" data-title="سی++" data-language-autonym="کوردی" data-language-local-name="kurdo sorani" class="interlanguage-link-target"><span>کوردی</span></a></li><li class="interlanguage-link interwiki-cs mw-list-item"><a href="https://cs.wikipedia.org/wiki/C%2B%2B" title="C++ (checo)" lang="cs" hreflang="cs" data-title="C++" data-language-autonym="Čeština" data-language-local-name="checo" class="interlanguage-link-target"><span>Čeština</span></a></li><li class="interlanguage-link interwiki-cv mw-list-item"><a href="https://cv.wikipedia.org/wiki/C%2B%2B" title="C++ (chuvasio)" lang="cv" hreflang="cv" data-title="C++" data-language-autonym="Чӑвашла" data-language-local-name="chuvasio" class="interlanguage-link-target"><span>Чӑвашла</span></a></li><li class="interlanguage-link interwiki-da mw-list-item"><a href="https://da.wikipedia.org/wiki/C%2B%2B" title="C++ (danés)" lang="da" hreflang="da" data-title="C++" data-language-autonym="Dansk" data-language-local-name="danés" class="interlanguage-link-target"><span>Dansk</span></a></li><li class="interlanguage-link interwiki-de mw-list-item"><a href="https://de.wikipedia.org/wiki/C%2B%2B" title="C++ (alemán)" lang="de" hreflang="de" data-title="C++" data-language-autonym="Deutsch" data-language-local-name="alemán" class="interlanguage-link-target"><span>Deutsch</span></a></li><li class="interlanguage-link interwiki-el mw-list-item"><a href="https://el.wikipedia.org/wiki/C%2B%2B" title="C++ (griego)" lang="el" hreflang="el" data-title="C++" data-language-autonym="Ελληνικά" data-language-local-name="griego" class="interlanguage-link-target"><span>Ελληνικά</span></a></li><li class="interlanguage-link interwiki-en mw-list-item"><a href="https://en.wikipedia.org/wiki/C%2B%2B" title="C++ (inglés)" lang="en" hreflang="en" data-title="C++" data-language-autonym="English" data-language-local-name="inglés" class="interlanguage-link-target"><span>English</span></a></li><li class="interlanguage-link interwiki-eo mw-list-item"><a href="https://eo.wikipedia.org/wiki/C%2B%2B" title="C++ (esperanto)" lang="eo" hreflang="eo" data-title="C++" data-language-autonym="Esperanto" data-language-local-name="esperanto" class="interlanguage-link-target"><span>Esperanto</span></a></li><li class="interlanguage-link interwiki-et mw-list-item"><a href="https://et.wikipedia.org/wiki/C%2B%2B" title="C++ (estonio)" lang="et" hreflang="et" data-title="C++" data-language-autonym="Eesti" data-language-local-name="estonio" class="interlanguage-link-target"><span>Eesti</span></a></li><li class="interlanguage-link interwiki-eu mw-list-item"><a href="https://eu.wikipedia.org/wiki/C%2B%2B" title="C++ (euskera)" lang="eu" hreflang="eu" data-title="C++" data-language-autonym="Euskara" data-language-local-name="euskera" class="interlanguage-link-target"><span>Euskara</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/C%2B%2B" title="C++ (persa)" lang="fa" hreflang="fa" data-title="C++" data-language-autonym="فارسی" data-language-local-name="persa" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fi mw-list-item"><a href="https://fi.wikipedia.org/wiki/C%2B%2B" title="C++ (finés)" lang="fi" hreflang="fi" data-title="C++" data-language-autonym="Suomi" data-language-local-name="finés" class="interlanguage-link-target"><span>Suomi</span></a></li><li class="interlanguage-link interwiki-fj mw-list-item"><a href="https://fj.wikipedia.org/wiki/C%2B%2B" title="C++ (fiyiano)" lang="fj" hreflang="fj" data-title="C++" data-language-autonym="Na Vosa Vakaviti" data-language-local-name="fiyiano" class="interlanguage-link-target"><span>Na Vosa Vakaviti</span></a></li><li class="interlanguage-link interwiki-fr mw-list-item"><a href="https://fr.wikipedia.org/wiki/C%2B%2B" title="C++ (francés)" lang="fr" hreflang="fr" data-title="C++" data-language-autonym="Français" data-language-local-name="francés" class="interlanguage-link-target"><span>Français</span></a></li><li class="interlanguage-link interwiki-ga mw-list-item"><a href="https://ga.wikipedia.org/wiki/C%2B%2B" title="C++ (irlandés)" lang="ga" hreflang="ga" data-title="C++" data-language-autonym="Gaeilge" data-language-local-name="irlandés" class="interlanguage-link-target"><span>Gaeilge</span></a></li><li class="interlanguage-link interwiki-gan mw-list-item"><a href="https://gan.wikipedia.org/wiki/C%2B%2B" title="C++ (chino gan)" lang="gan" hreflang="gan" data-title="C++" data-language-autonym="贛語" data-language-local-name="chino gan" class="interlanguage-link-target"><span>贛語</span></a></li><li class="interlanguage-link interwiki-gl mw-list-item"><a href="https://gl.wikipedia.org/wiki/C%2B%2B" title="C++ (gallego)" lang="gl" hreflang="gl" data-title="C++" data-language-autonym="Galego" data-language-local-name="gallego" class="interlanguage-link-target"><span>Galego</span></a></li><li class="interlanguage-link interwiki-gu mw-list-item"><a href="https://gu.wikipedia.org/wiki/C%2B%2B(%E0%AA%AA%E0%AB%8D%E0%AA%B0%E0%AB%8B%E0%AA%97%E0%AB%8D%E0%AA%B0%E0%AA%BE%E0%AA%AE%E0%AA%BF%E0%AA%82%E0%AA%97_%E0%AA%AD%E0%AA%BE%E0%AA%B7%E0%AA%BE)" title="C++(પ્રોગ્રામિંગ ભાષા) (guyaratí)" lang="gu" hreflang="gu" data-title="C++(પ્રોગ્રામિંગ ભાષા)" data-language-autonym="ગુજરાતી" data-language-local-name="guyaratí" class="interlanguage-link-target"><span>ગુજરાતી</span></a></li><li class="interlanguage-link interwiki-ha mw-list-item"><a href="https://ha.wikipedia.org/wiki/C%2B%2B" title="C++ (hausa)" lang="ha" hreflang="ha" data-title="C++" data-language-autonym="Hausa" data-language-local-name="hausa" class="interlanguage-link-target"><span>Hausa</span></a></li><li class="interlanguage-link interwiki-he mw-list-item"><a href="https://he.wikipedia.org/wiki/C%2B%2B" title="C++ (hebreo)" lang="he" hreflang="he" data-title="C++" data-language-autonym="עברית" data-language-local-name="hebreo" class="interlanguage-link-target"><span>עברית</span></a></li><li class="interlanguage-link interwiki-hi mw-list-item"><a href="https://hi.wikipedia.org/wiki/%E0%A4%B8%E0%A5%80%2B%2B" title="सी++ (hindi)" lang="hi" hreflang="hi" data-title="सी++" data-language-autonym="हिन्दी" data-language-local-name="hindi" class="interlanguage-link-target"><span>हिन्दी</span></a></li><li class="interlanguage-link interwiki-hr mw-list-item"><a href="https://hr.wikipedia.org/wiki/C%2B%2B" title="C++ (croata)" lang="hr" hreflang="hr" data-title="C++" data-language-autonym="Hrvatski" data-language-local-name="croata" class="interlanguage-link-target"><span>Hrvatski</span></a></li><li class="interlanguage-link interwiki-hu mw-list-item"><a href="https://hu.wikipedia.org/wiki/C%2B%2B" title="C++ (húngaro)" lang="hu" hreflang="hu" data-title="C++" data-language-autonym="Magyar" data-language-local-name="húngaro" class="interlanguage-link-target"><span>Magyar</span></a></li><li class="interlanguage-link interwiki-hy mw-list-item"><a href="https://hy.wikipedia.org/wiki/C%2B%2B" title="C++ (armenio)" lang="hy" hreflang="hy" data-title="C++" data-language-autonym="Հայերեն" data-language-local-name="armenio" class="interlanguage-link-target"><span>Հայերեն</span></a></li><li class="interlanguage-link interwiki-ia mw-list-item"><a href="https://ia.wikipedia.org/wiki/C%2B%2B" title="C++ (interlingua)" lang="ia" hreflang="ia" data-title="C++" data-language-autonym="Interlingua" data-language-local-name="interlingua" class="interlanguage-link-target"><span>Interlingua</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wikipedia.org/wiki/C%2B%2B" title="C++ (indonesio)" lang="id" hreflang="id" data-title="C++" data-language-autonym="Bahasa Indonesia" data-language-local-name="indonesio" class="interlanguage-link-target"><span>Bahasa Indonesia</span></a></li><li class="interlanguage-link interwiki-io mw-list-item"><a href="https://io.wikipedia.org/wiki/C%2B%2B" title="C++ (ido)" lang="io" hreflang="io" data-title="C++" data-language-autonym="Ido" data-language-local-name="ido" class="interlanguage-link-target"><span>Ido</span></a></li><li class="interlanguage-link interwiki-is mw-list-item"><a href="https://is.wikipedia.org/wiki/C%2B%2B" title="C++ (islandés)" lang="is" hreflang="is" data-title="C++" data-language-autonym="Íslenska" data-language-local-name="islandés" class="interlanguage-link-target"><span>Íslenska</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wikipedia.org/wiki/C%2B%2B" title="C++ (italiano)" lang="it" hreflang="it" data-title="C++" data-language-autonym="Italiano" data-language-local-name="italiano" class="interlanguage-link-target"><span>Italiano</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/C%2B%2B" title="C++ (japonés)" lang="ja" hreflang="ja" data-title="C++" data-language-autonym="日本語" data-language-local-name="japonés" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-jv mw-list-item"><a href="https://jv.wikipedia.org/wiki/C%2B%2B" title="C++ (javanés)" lang="jv" hreflang="jv" data-title="C++" data-language-autonym="Jawa" data-language-local-name="javanés" class="interlanguage-link-target"><span>Jawa</span></a></li><li class="interlanguage-link interwiki-ka mw-list-item"><a href="https://ka.wikipedia.org/wiki/C%2B%2B" title="C++ (georgiano)" lang="ka" hreflang="ka" data-title="C++" data-language-autonym="ქართული" data-language-local-name="georgiano" class="interlanguage-link-target"><span>ქართული</span></a></li><li class="interlanguage-link interwiki-kaa mw-list-item"><a href="https://kaa.wikipedia.org/wiki/C%2B%2B" title="C++ (karakalpako)" lang="kaa" hreflang="kaa" data-title="C++" data-language-autonym="Qaraqalpaqsha" data-language-local-name="karakalpako" class="interlanguage-link-target"><span>Qaraqalpaqsha</span></a></li><li class="interlanguage-link interwiki-kk mw-list-item"><a href="https://kk.wikipedia.org/wiki/C%2B%2B" title="C++ (kazajo)" lang="kk" hreflang="kk" data-title="C++" data-language-autonym="Қазақша" data-language-local-name="kazajo" class="interlanguage-link-target"><span>Қазақша</span></a></li><li class="interlanguage-link interwiki-kn mw-list-item"><a href="https://kn.wikipedia.org/wiki/%E0%B2%B8%E0%B2%BF%2B%2B" title="ಸಿ++ (canarés)" lang="kn" hreflang="kn" data-title="ಸಿ++" data-language-autonym="ಕನ್ನಡ" data-language-local-name="canarés" class="interlanguage-link-target"><span>ಕನ್ನಡ</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/C%2B%2B" title="C++ (coreano)" lang="ko" hreflang="ko" data-title="C++" data-language-autonym="한국어" data-language-local-name="coreano" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-ky mw-list-item"><a href="https://ky.wikipedia.org/wiki/C%2B%2B" title="C++ (kirguís)" lang="ky" hreflang="ky" data-title="C++" data-language-autonym="Кыргызча" data-language-local-name="kirguís" class="interlanguage-link-target"><span>Кыргызча</span></a></li><li class="interlanguage-link interwiki-la mw-list-item"><a href="https://la.wikipedia.org/wiki/C%2B%2B" title="C++ (latín)" lang="la" hreflang="la" data-title="C++" data-language-autonym="Latina" data-language-local-name="latín" class="interlanguage-link-target"><span>Latina</span></a></li><li class="interlanguage-link interwiki-lb mw-list-item"><a href="https://lb.wikipedia.org/wiki/C%2B%2B" title="C++ (luxemburgués)" lang="lb" hreflang="lb" data-title="C++" data-language-autonym="Lëtzebuergesch" data-language-local-name="luxemburgués" class="interlanguage-link-target"><span>Lëtzebuergesch</span></a></li><li class="interlanguage-link interwiki-lmo mw-list-item"><a href="https://lmo.wikipedia.org/wiki/C%2B%2B" title="C++ (lombardo)" lang="lmo" hreflang="lmo" data-title="C++" data-language-autonym="Lombard" data-language-local-name="lombardo" class="interlanguage-link-target"><span>Lombard</span></a></li><li class="interlanguage-link interwiki-lt mw-list-item"><a href="https://lt.wikipedia.org/wiki/C%2B%2B" title="C++ (lituano)" lang="lt" hreflang="lt" data-title="C++" data-language-autonym="Lietuvių" data-language-local-name="lituano" class="interlanguage-link-target"><span>Lietuvių</span></a></li><li class="interlanguage-link interwiki-lv mw-list-item"><a href="https://lv.wikipedia.org/wiki/C%2B%2B" title="C++ (letón)" lang="lv" hreflang="lv" data-title="C++" data-language-autonym="Latviešu" data-language-local-name="letón" class="interlanguage-link-target"><span>Latviešu</span></a></li><li class="interlanguage-link interwiki-min mw-list-item"><a href="https://min.wikipedia.org/wiki/C%2B%2B" title="C++ (minangkabau)" lang="min" hreflang="min" data-title="C++" data-language-autonym="Minangkabau" data-language-local-name="minangkabau" class="interlanguage-link-target"><span>Minangkabau</span></a></li><li class="interlanguage-link interwiki-mk mw-list-item"><a href="https://mk.wikipedia.org/wiki/C%2B%2B" title="C++ (macedonio)" lang="mk" hreflang="mk" data-title="C++" data-language-autonym="Македонски" data-language-local-name="macedonio" class="interlanguage-link-target"><span>Македонски</span></a></li><li class="interlanguage-link interwiki-ml mw-list-item"><a href="https://ml.wikipedia.org/wiki/%E0%B4%B8%E0%B4%BF%2B%2B" title="സി++ (malayálam)" lang="ml" hreflang="ml" data-title="സി++" data-language-autonym="മലയാളം" data-language-local-name="malayálam" class="interlanguage-link-target"><span>മലയാളം</span></a></li><li class="interlanguage-link interwiki-mn mw-list-item"><a href="https://mn.wikipedia.org/wiki/C%2B%2B" title="C++ (mongol)" lang="mn" hreflang="mn" data-title="C++" data-language-autonym="Монгол" data-language-local-name="mongol" class="interlanguage-link-target"><span>Монгол</span></a></li><li class="interlanguage-link interwiki-mr mw-list-item"><a href="https://mr.wikipedia.org/wiki/%E0%A4%B8%E0%A5%80_%E0%A4%AA%E0%A5%8D%E0%A4%B2%E0%A4%B8_%E0%A4%AA%E0%A5%8D%E0%A4%B2%E0%A4%B8_(%E0%A4%86%E0%A4%9C%E0%A5%8D%E0%A4%9E%E0%A4%BE%E0%A4%B5%E0%A4%B2%E0%A5%80_%E0%A4%AD%E0%A4%BE%E0%A4%B7%E0%A4%BE)" title="सी प्लस प्लस (आज्ञावली भाषा) (maratí)" lang="mr" hreflang="mr" data-title="सी प्लस प्लस (आज्ञावली भाषा)" data-language-autonym="मराठी" data-language-local-name="maratí" class="interlanguage-link-target"><span>मराठी</span></a></li><li class="interlanguage-link interwiki-ms mw-list-item"><a href="https://ms.wikipedia.org/wiki/C%2B%2B" title="C++ (malayo)" lang="ms" hreflang="ms" data-title="C++" data-language-autonym="Bahasa Melayu" data-language-local-name="malayo" class="interlanguage-link-target"><span>Bahasa Melayu</span></a></li><li class="interlanguage-link interwiki-my mw-list-item"><a href="https://my.wikipedia.org/wiki/C%2B%2B" title="C++ (birmano)" lang="my" hreflang="my" data-title="C++" data-language-autonym="မြန်မာဘာသာ" data-language-local-name="birmano" class="interlanguage-link-target"><span>မြန်မာဘာသာ</span></a></li><li class="interlanguage-link interwiki-new mw-list-item"><a href="https://new.wikipedia.org/wiki/%E0%A4%B8%E0%A5%80%2B%2B" title="सी++ (nevarí)" lang="new" hreflang="new" data-title="सी++" data-language-autonym="नेपाल भाषा" data-language-local-name="nevarí" class="interlanguage-link-target"><span>नेपाल भाषा</span></a></li><li class="interlanguage-link interwiki-nl mw-list-item"><a href="https://nl.wikipedia.org/wiki/C%2B%2B" title="C++ (neerlandés)" lang="nl" hreflang="nl" data-title="C++" data-language-autonym="Nederlands" data-language-local-name="neerlandés" class="interlanguage-link-target"><span>Nederlands</span></a></li><li class="interlanguage-link interwiki-nn mw-list-item"><a href="https://nn.wikipedia.org/wiki/C%2B%2B" title="C++ (noruego nynorsk)" lang="nn" hreflang="nn" data-title="C++" data-language-autonym="Norsk nynorsk" data-language-local-name="noruego nynorsk" class="interlanguage-link-target"><span>Norsk nynorsk</span></a></li><li class="interlanguage-link interwiki-no mw-list-item"><a href="https://no.wikipedia.org/wiki/C%2B%2B" title="C++ (noruego bokmal)" lang="nb" hreflang="nb" data-title="C++" data-language-autonym="Norsk bokmål" data-language-local-name="noruego bokmal" class="interlanguage-link-target"><span>Norsk bokmål</span></a></li><li class="interlanguage-link interwiki-oc mw-list-item"><a href="https://oc.wikipedia.org/wiki/C%2B%2B" title="C++ (occitano)" lang="oc" hreflang="oc" data-title="C++" data-language-autonym="Occitan" data-language-local-name="occitano" class="interlanguage-link-target"><span>Occitan</span></a></li><li class="interlanguage-link interwiki-pa mw-list-item"><a href="https://pa.wikipedia.org/wiki/%E0%A8%B8%E0%A9%80%2B%2B" title="ਸੀ++ (punyabí)" lang="pa" hreflang="pa" data-title="ਸੀ++" data-language-autonym="ਪੰਜਾਬੀ" data-language-local-name="punyabí" class="interlanguage-link-target"><span>ਪੰਜਾਬੀ</span></a></li><li class="interlanguage-link interwiki-pfl mw-list-item"><a href="https://pfl.wikipedia.org/wiki/C%2B%2B" title="C++ (Palatine German)" lang="pfl" hreflang="pfl" data-title="C++" data-language-autonym="Pälzisch" data-language-local-name="Palatine German" class="interlanguage-link-target"><span>Pälzisch</span></a></li><li class="interlanguage-link interwiki-pl mw-list-item"><a href="https://pl.wikipedia.org/wiki/C%2B%2B" title="C++ (polaco)" lang="pl" hreflang="pl" data-title="C++" data-language-autonym="Polski" data-language-local-name="polaco" class="interlanguage-link-target"><span>Polski</span></a></li><li class="interlanguage-link interwiki-pnb mw-list-item"><a href="https://pnb.wikipedia.org/wiki/%D8%B3%DB%8C%2B%2B" title="سی++ (Western Punjabi)" lang="pnb" hreflang="pnb" data-title="سی++" data-language-autonym="پنجابی" data-language-local-name="Western Punjabi" class="interlanguage-link-target"><span>پنجابی</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/C%2B%2B" title="C++ (portugués)" lang="pt" hreflang="pt" data-title="C++" data-language-autonym="Português" data-language-local-name="portugués" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-qu mw-list-item"><a href="https://qu.wikipedia.org/wiki/C%2B%2B" title="C++ (quechua)" lang="qu" hreflang="qu" data-title="C++" data-language-autonym="Runa Simi" data-language-local-name="quechua" class="interlanguage-link-target"><span>Runa Simi</span></a></li><li class="interlanguage-link interwiki-ro mw-list-item"><a href="https://ro.wikipedia.org/wiki/C%2B%2B" title="C++ (rumano)" lang="ro" hreflang="ro" data-title="C++" data-language-autonym="Română" data-language-local-name="rumano" class="interlanguage-link-target"><span>Română</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/C%2B%2B" title="C++ (ruso)" lang="ru" hreflang="ru" data-title="C++" data-language-autonym="Русский" data-language-local-name="ruso" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-sah mw-list-item"><a href="https://sah.wikipedia.org/wiki/C%2B%2B" title="C++ (sakha)" lang="sah" hreflang="sah" data-title="C++" data-language-autonym="Саха тыла" data-language-local-name="sakha" class="interlanguage-link-target"><span>Саха тыла</span></a></li><li class="interlanguage-link interwiki-sh mw-list-item"><a href="https://sh.wikipedia.org/wiki/C%2B%2B" title="C++ (serbocroata)" lang="sh" hreflang="sh" data-title="C++" data-language-autonym="Srpskohrvatski / српскохрватски" data-language-local-name="serbocroata" class="interlanguage-link-target"><span>Srpskohrvatski / српскохрватски</span></a></li><li class="interlanguage-link interwiki-si mw-list-item"><a href="https://si.wikipedia.org/wiki/C%2B%2B" title="C++ (cingalés)" lang="si" hreflang="si" data-title="C++" data-language-autonym="සිංහල" data-language-local-name="cingalés" class="interlanguage-link-target"><span>සිංහල</span></a></li><li class="interlanguage-link interwiki-simple mw-list-item"><a href="https://simple.wikipedia.org/wiki/C%2B%2B" title="C++ (Simple English)" lang="en-simple" hreflang="en-simple" data-title="C++" data-language-autonym="Simple English" data-language-local-name="Simple English" class="interlanguage-link-target"><span>Simple English</span></a></li><li class="interlanguage-link interwiki-sk mw-list-item"><a href="https://sk.wikipedia.org/wiki/C%2B%2B" title="C++ (eslovaco)" lang="sk" hreflang="sk" data-title="C++" data-language-autonym="Slovenčina" data-language-local-name="eslovaco" class="interlanguage-link-target"><span>Slovenčina</span></a></li><li class="interlanguage-link interwiki-sl mw-list-item"><a href="https://sl.wikipedia.org/wiki/C%2B%2B" title="C++ (esloveno)" lang="sl" hreflang="sl" data-title="C++" data-language-autonym="Slovenščina" data-language-local-name="esloveno" class="interlanguage-link-target"><span>Slovenščina</span></a></li><li class="interlanguage-link interwiki-sq mw-list-item"><a href="https://sq.wikipedia.org/wiki/C%2B%2B" title="C++ (albanés)" lang="sq" hreflang="sq" data-title="C++" data-language-autonym="Shqip" data-language-local-name="albanés" class="interlanguage-link-target"><span>Shqip</span></a></li><li class="interlanguage-link interwiki-sr mw-list-item"><a href="https://sr.wikipedia.org/wiki/C%2B%2B" title="C++ (serbio)" lang="sr" hreflang="sr" data-title="C++" data-language-autonym="Српски / srpski" data-language-local-name="serbio" class="interlanguage-link-target"><span>Српски / srpski</span></a></li><li class="interlanguage-link interwiki-sv mw-list-item"><a href="https://sv.wikipedia.org/wiki/C%2B%2B" title="C++ (sueco)" lang="sv" hreflang="sv" data-title="C++" data-language-autonym="Svenska" data-language-local-name="sueco" class="interlanguage-link-target"><span>Svenska</span></a></li><li class="interlanguage-link interwiki-sw mw-list-item"><a href="https://sw.wikipedia.org/wiki/C%2B%2B" title="C++ (suajili)" lang="sw" hreflang="sw" data-title="C++" data-language-autonym="Kiswahili" data-language-local-name="suajili" class="interlanguage-link-target"><span>Kiswahili</span></a></li><li class="interlanguage-link interwiki-ta mw-list-item"><a href="https://ta.wikipedia.org/wiki/%E0%AE%9A%E0%AE%BF%2B%2B" title="சி++ (tamil)" lang="ta" hreflang="ta" data-title="சி++" data-language-autonym="தமிழ்" data-language-local-name="tamil" class="interlanguage-link-target"><span>தமிழ்</span></a></li><li class="interlanguage-link interwiki-te mw-list-item"><a href="https://te.wikipedia.org/wiki/%E0%B0%B8%E0%B1%80_%E0%B0%AA%E0%B1%8D%E0%B0%B2%E0%B0%B8%E0%B1%8D_%E0%B0%AA%E0%B1%8D%E0%B0%B2%E0%B0%B8%E0%B1%8D" title="సీ ప్లస్ ప్లస్ (telugu)" lang="te" hreflang="te" data-title="సీ ప్లస్ ప్లస్" data-language-autonym="తెలుగు" data-language-local-name="telugu" class="interlanguage-link-target"><span>తెలుగు</span></a></li><li class="interlanguage-link interwiki-tg mw-list-item"><a href="https://tg.wikipedia.org/wiki/C%2B%2B" title="C++ (tayiko)" lang="tg" hreflang="tg" data-title="C++" data-language-autonym="Тоҷикӣ" data-language-local-name="tayiko" class="interlanguage-link-target"><span>Тоҷикӣ</span></a></li><li class="interlanguage-link interwiki-th mw-list-item"><a href="https://th.wikipedia.org/wiki/%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2%E0%B8%8B%E0%B8%B5%E0%B8%9E%E0%B8%A5%E0%B8%B1%E0%B8%AA%E0%B8%9E%E0%B8%A5%E0%B8%B1%E0%B8%AA" title="ภาษาซีพลัสพลัส (tailandés)" lang="th" hreflang="th" data-title="ภาษาซีพลัสพลัส" data-language-autonym="ไทย" data-language-local-name="tailandés" class="interlanguage-link-target"><span>ไทย</span></a></li><li class="interlanguage-link interwiki-tk mw-list-item"><a href="https://tk.wikipedia.org/wiki/C%2B%2B_programmirleme" title="C++ programmirleme (turcomano)" lang="tk" hreflang="tk" data-title="C++ programmirleme" data-language-autonym="Türkmençe" data-language-local-name="turcomano" class="interlanguage-link-target"><span>Türkmençe</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wikipedia.org/wiki/C%2B%2B" title="C++ (turco)" lang="tr" hreflang="tr" data-title="C++" data-language-autonym="Türkçe" data-language-local-name="turco" class="interlanguage-link-target"><span>Türkçe</span></a></li><li class="interlanguage-link interwiki-tt mw-list-item"><a href="https://tt.wikipedia.org/wiki/C%2B%2B" title="C++ (tártaro)" lang="tt" hreflang="tt" data-title="C++" data-language-autonym="Татарча / tatarça" data-language-local-name="tártaro" class="interlanguage-link-target"><span>Татарча / tatarça</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/C%2B%2B" title="C++ (ucraniano)" lang="uk" hreflang="uk" data-title="C++" data-language-autonym="Українська" data-language-local-name="ucraniano" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-ur mw-list-item"><a href="https://ur.wikipedia.org/wiki/%D8%B3%DB%8C%2B%2B" title="سی++ (urdu)" lang="ur" hreflang="ur" data-title="سی++" data-language-autonym="اردو" data-language-local-name="urdu" class="interlanguage-link-target"><span>اردو</span></a></li><li class="interlanguage-link interwiki-uz mw-list-item"><a href="https://uz.wikipedia.org/wiki/C%2B%2B" title="C++ (uzbeko)" lang="uz" hreflang="uz" data-title="C++" data-language-autonym="Oʻzbekcha / ўзбекча" data-language-local-name="uzbeko" class="interlanguage-link-target"><span>Oʻzbekcha / ўзбекча</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wikipedia.org/wiki/C%2B%2B" title="C++ (vietnamita)" lang="vi" hreflang="vi" data-title="C++" data-language-autonym="Tiếng Việt" data-language-local-name="vietnamita" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-war mw-list-item"><a href="https://war.wikipedia.org/wiki/C%2B%2B" title="C++ (waray)" lang="war" hreflang="war" data-title="C++" data-language-autonym="Winaray" data-language-local-name="waray" class="interlanguage-link-target"><span>Winaray</span></a></li><li class="interlanguage-link interwiki-wuu mw-list-item"><a href="https://wuu.wikipedia.org/wiki/C%2B%2B" title="C++ (chino wu)" lang="wuu" hreflang="wuu" data-title="C++" data-language-autonym="吴语" data-language-local-name="chino wu" class="interlanguage-link-target"><span>吴语</span></a></li><li class="interlanguage-link interwiki-yi mw-list-item"><a href="https://yi.wikipedia.org/wiki/%2B%2BC" title="++C (yidis)" lang="yi" hreflang="yi" data-title="++C" data-language-autonym="ייִדיש" data-language-local-name="yidis" class="interlanguage-link-target"><span>ייִדיש</span></a></li><li class="interlanguage-link interwiki-yo mw-list-item"><a href="https://yo.wikipedia.org/wiki/C%2B%2B" title="C++ (yoruba)" lang="yo" hreflang="yo" data-title="C++" data-language-autonym="Yorùbá" data-language-local-name="yoruba" class="interlanguage-link-target"><span>Yorùbá</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/C%2B%2B" title="C++ (chino)" lang="zh" hreflang="zh" data-title="C++" data-language-autonym="中文" data-language-local-name="chino" class="interlanguage-link-target"><span>中文</span></a></li><li class="interlanguage-link interwiki-zh-classical mw-list-item"><a href="https://zh-classical.wikipedia.org/wiki/%E4%B8%99%E5%8A%A0%E5%8A%A0" title="丙加加 (Literary Chinese)" lang="lzh" hreflang="lzh" data-title="丙加加" data-language-autonym="文言" data-language-local-name="Literary Chinese" class="interlanguage-link-target"><span>文言</span></a></li><li class="interlanguage-link interwiki-zh-min-nan mw-list-item"><a href="https://zh-min-nan.wikipedia.org/wiki/C%2B%2B" title="C++ (chino min nan)" lang="nan" hreflang="nan" data-title="C++" data-language-autonym="閩南語 / Bân-lâm-gú" data-language-local-name="chino min nan" class="interlanguage-link-target"><span>閩南語 / Bân-lâm-gú</span></a></li><li class="interlanguage-link interwiki-zh-yue mw-list-item"><a href="https://zh-yue.wikipedia.org/wiki/C%2B%2B" title="C++ (cantonés)" lang="yue" hreflang="yue" data-title="C++" data-language-autonym="粵語" data-language-local-name="cantonés" class="interlanguage-link-target"><span>粵語</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q2407#sitelinks-wikipedia" title="Editar enlaces interlingüísticos" class="wbc-editpage">Editar enlaces</a></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Espacios de nombres"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/C%2B%2B" title="Ver la página de contenido [c]" accesskey="c"><span>Artículo</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Discusi%C3%B3n:C%2B%2B" rel="discussion" title="Discusión acerca de la página [t]" accesskey="t"><span>Discusión</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Cambiar variante de idioma" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">español</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Vistas"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/C%2B%2B"><span>Leer</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=C%2B%2B&action=edit" title="Editar esta página [e]" accesskey="e"><span>Editar</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=C%2B%2B&action=history" title="Versiones anteriores de esta página [h]" accesskey="h"><span>Ver historial</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Página de herramientas"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Herramientas" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Herramientas</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Herramientas</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">mover a la barra lateral</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">ocultar</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="Más opciones" > <div class="vector-menu-heading"> Acciones </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/C%2B%2B"><span>Leer</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=C%2B%2B&action=edit" title="Editar esta página [e]" accesskey="e"><span>Editar</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=C%2B%2B&action=history"><span>Ver historial</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Especial:LoQueEnlazaAqu%C3%AD/C%2B%2B" title="Lista de todas las páginas de la wiki que enlazan aquí [j]" accesskey="j"><span>Lo que enlaza aquí</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Especial:CambiosEnEnlazadas/C%2B%2B" rel="nofollow" title="Cambios recientes en las páginas que enlazan con esta [k]" accesskey="k"><span>Cambios en enlazadas</span></a></li><li id="t-upload" class="mw-list-item"><a href="//commons.wikimedia.org/wiki/Special:UploadWizard?uselang=es" title="Subir archivos [u]" accesskey="u"><span>Subir archivo</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Especial:P%C3%A1ginasEspeciales" title="Lista de todas las páginas especiales [q]" accesskey="q"><span>Páginas especiales</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=C%2B%2B&oldid=163494424" title="Enlace permanente a esta versión de la página"><span>Enlace permanente</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=C%2B%2B&action=info" title="Más información sobre esta página"><span>Información de la página</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Especial:Citar&page=C%2B%2B&id=163494424&wpFormIdentifier=titleform" title="Información sobre cómo citar esta página"><span>Citar esta página</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Especial:Acortador_de_URL&url=https%3A%2F%2Fes.wikipedia.org%2Fwiki%2FC%252B%252B"><span>Obtener URL acortado</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Especial:QrCode&url=https%3A%2F%2Fes.wikipedia.org%2Fwiki%2FC%252B%252B"><span>Descargar código QR</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Imprimir/exportar </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-create_a_book" class="mw-list-item"><a href="/w/index.php?title=Especial:Libro&bookcmd=book_creator&referer=C%2B%2B"><span>Crear un libro</span></a></li><li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Especial:DownloadAsPdf&page=C%2B%2B&action=show-download-screen"><span>Descargar como PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=C%2B%2B&printable=yes" title="Versión imprimible de esta página [p]" accesskey="p"><span>Versión para imprimir</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> En otros proyectos </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="wb-otherproject-link wb-otherproject-commons mw-list-item"><a href="https://commons.wikimedia.org/wiki/Category:C%2B%2B" hreflang="en"><span>Wikimedia Commons</span></a></li><li class="wb-otherproject-link wb-otherproject-wikibooks mw-list-item"><a href="https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C%2B%2B" hreflang="es"><span>Wikilibros</span></a></li><li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q2407" title="Enlace al elemento conectado del repositorio de datos [g]" accesskey="g"><span>Elemento de Wikidata</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Página de herramientas"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Apariencia"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Apariencia</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">mover a la barra lateral</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">ocultar</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">De Wikipedia, la enciclopedia libre</div> </div> <div id="contentSub"><div id="mw-content-subtitle"><span class="mw-redirectedfrom">(Redirigido desde «<a href="/w/index.php?title=C_M%C3%A1s_M%C3%A1s&redirect=no" class="mw-redirect" title="C Más Más">C Más Más</a>»)</span></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="es" dir="ltr"><style data-mw-deduplicate="TemplateStyles:r157776694">.mw-parser-output .infobox .imagen{max-width:100%;margin:0 auto}.mw-parser-output .infobox .imagen img{max-width:100%;height:auto}.mw-parser-output .infobox .mw-kartographer-container .thumbinner,.mw-parser-output .infobox .mw-kartographer-map{box-sizing:border-box;width:100%!important}body.skin-timeless .mw-parser-output .infobox .imagen a.image>img{max-width:100%!important;height:auto!important}</style><table class="infobox" style="width:22.7em; line-height: 1.4em; text-align:left; padding:.23em;"><tbody><tr><th colspan="3" class="cabecera informática" style="text-align:center;background-color:#eee;color:inherit;">C++</th></tr><tr><td colspan="3" class="imagen" style="text-align:center;"> <span typeof="mw:File"><a href="/wiki/Archivo:ISO_C%2B%2B_Logo.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/1/18/ISO_C%2B%2B_Logo.svg/200px-ISO_C%2B%2B_Logo.svg.png" decoding="async" width="200" height="225" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/1/18/ISO_C%2B%2B_Logo.svg/300px-ISO_C%2B%2B_Logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/18/ISO_C%2B%2B_Logo.svg/400px-ISO_C%2B%2B_Logo.svg.png 2x" data-file-width="306" data-file-height="344" /></a></span></td></tr><tr><td colspan="3" class="imagen" style="text-align:center;"> <span typeof="mw:File"><a href="/wiki/Archivo:Hello_World_C%2B%2B.png" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/c/c1/Hello_World_C%2B%2B.png/320px-Hello_World_C%2B%2B.png" decoding="async" width="320" height="158" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/c/c1/Hello_World_C%2B%2B.png/480px-Hello_World_C%2B%2B.png 1.5x, //upload.wikimedia.org/wikipedia/commons/c/c1/Hello_World_C%2B%2B.png 2x" data-file-width="560" data-file-height="277" /></a></span></td></tr><tr><th colspan="3" style="text-align:center;background-color:#eee;">Desarrollador(es)</th></tr><tr><td colspan="3" style="text-align:center;"> <b><a href="/wiki/Bjarne_Stroustrup" title="Bjarne Stroustrup">Bjarne Stroustrup</a>, <a href="/wiki/Laboratorios_Bell" class="mw-redirect" title="Laboratorios Bell">Laboratorios Bell</a></b><br /><i><a rel="nofollow" class="external free" href="https://isocpp.org/">https://isocpp.org/</a> y <a rel="nofollow" class="external free" href="http://www.open-std.org/jtc1/sc22/wg21/">http://www.open-std.org/jtc1/sc22/wg21/</a></i></td></tr><tr><th colspan="3" style="text-align:center;background-color:#eee;">Información general</th></tr><tr><th scope="row" style="text-align:left;"><a href="/wiki/Extensi%C3%B3n_de_archivo" title="Extensión de archivo">Extensiones comunes</a></th><td colspan="2"> <code>.h .hh .hpp .hxx .h++ .cc .cpp .cxx .c++</code></td></tr><tr><th scope="row" style="text-align:left;"><a href="/wiki/Paradigma_de_programaci%C3%B3n" title="Paradigma de programación">Paradigma</a></th><td colspan="2"> <a href="/wiki/Programaci%C3%B3n_multiparadigma" class="mw-redirect" title="Programación multiparadigma">Multiparadigma</a>: <a href="/wiki/Programaci%C3%B3n_Estructurada" class="mw-redirect" title="Programación Estructurada">Programación Estructurada</a>, <a href="/wiki/Programaci%C3%B3n_imperativa" title="Programación imperativa">imperativo</a>, <a href="/wiki/Programaci%C3%B3n_gen%C3%A9rica" title="Programación genérica">programación genérica</a></td></tr><tr><th scope="row" style="text-align:left;">Apareció en</th><td colspan="2"> 1983</td></tr><tr><th scope="row" style="text-align:left;">Diseñado por</th><td colspan="2"> <a href="/wiki/Bjarne_Stroustrup" title="Bjarne Stroustrup">Bjarne Stroustrup</a></td></tr><tr><th scope="row" style="text-align:left;">Última versión estable</th><td colspan="2"> ISO/IEC 14882:2020 (<a href="/wiki/C%2B%2B20" title="C++20">C++20</a>)<sup id="cite_ref-1" class="reference separada"><a href="#cite_note-1"><span class="corchete-llamada">[</span>1<span class="corchete-llamada">]</span></a></sup>​ <small>(Diciembre de 2020)</small></td></tr><tr><th scope="row" style="text-align:left;">Última versión en pruebas</th><td colspan="2"> <a href="/wiki/C%2B%2B23" title="C++23">C++23</a> <small>(2023)</small></td></tr><tr><th scope="row" style="text-align:left;"><a href="/wiki/Sistema_de_tipos" title="Sistema de tipos">Sistema de tipos</a></th><td colspan="2"> Fuerte, estático, nominativo</td></tr><tr><th scope="row" style="text-align:left;">Implementaciones</th><td colspan="2"> <a href="/wiki/C%2B%2B_Builder" class="mw-redirect" title="C++ Builder">C++ Builder</a>, <a href="/wiki/Clang" title="Clang">clang</a>, Comeau C/C++, <a href="/wiki/GNU_Compiler_Collection" title="GNU Compiler Collection">GCC</a>, <a href="/wiki/Intel_C%2B%2B_Compiler" title="Intel C++ Compiler">Intel C++ Compiler</a>, <a href="/wiki/Microsoft_Visual_C%2B%2B" title="Microsoft Visual C++">Microsoft Visual C++</a>, Sun Studio, <a href="/wiki/Code::Blocks" title="Code::Blocks">Code::Blocks</a>, Zinjai</td></tr><tr><th scope="row" style="text-align:left;">Dialectos</th><td colspan="2"> <a href="/wiki/ISO/IEC_14882" class="mw-redirect" title="ISO/IEC 14882">ISO/IEC C++</a> 1998, <a href="/wiki/ISO/IEC_14882" class="mw-redirect" title="ISO/IEC 14882">ISO/IEC C++</a> 2003, <a href="/wiki/ISO/IEC_14882" class="mw-redirect" title="ISO/IEC 14882">ISO/IEC C++</a> 2011</td></tr><tr><th scope="row" style="text-align:left;">Influido por</th><td colspan="2"> <a href="/wiki/C_(lenguaje_de_programaci%C3%B3n)" title="C (lenguaje de programación)">C</a>, <a href="/wiki/Simula" title="Simula">Simula</a>, <a href="/wiki/Ada_(lenguaje_de_programaci%C3%B3n)" title="Ada (lenguaje de programación)">Ada 83</a>, <a href="/wiki/ALGOL_68" class="mw-redirect" title="ALGOL 68">ALGOL 68</a>, <a href="/wiki/CLU_(lenguaje_de_programaci%C3%B3n)" class="mw-redirect" title="CLU (lenguaje de programación)">CLU</a>, ML<sup id="cite_ref-stroustruptcpppl_2-0" class="reference separada"><a href="#cite_note-stroustruptcpppl-2"><span class="corchete-llamada">[</span>2<span class="corchete-llamada">]</span></a></sup>​</td></tr><tr><th scope="row" style="text-align:left;">Ha influido a</th><td colspan="2"> <a href="/wiki/Perl" title="Perl">Perl</a>, LPC, <a href="/wiki/Lua" title="Lua">Lua</a>, Pike, <a href="/wiki/Ada_(lenguaje_de_programaci%C3%B3n)" title="Ada (lenguaje de programación)">Ada 95</a>, <a href="/wiki/Java_(lenguaje_de_programaci%C3%B3n)" title="Java (lenguaje de programación)">Java</a>, <a href="/wiki/PHP" title="PHP">PHP</a>, <a href="/wiki/D_(lenguaje_de_programaci%C3%B3n)" title="D (lenguaje de programación)">D</a>, <a href="/wiki/C99" class="mw-redirect" title="C99">C99</a>, <a href="/wiki/C_Sharp" title="C Sharp">C#</a>, <a href="/wiki/Falcon_(lenguaje_de_programaci%C3%B3n)" title="Falcon (lenguaje de programación)">Falcon</a></td></tr><tr><th scope="row" style="text-align:left;"><a href="/wiki/Sistema_operativo" title="Sistema operativo">Sistema operativo</a></th><td colspan="2"> <a href="/wiki/Multiplataforma" title="Multiplataforma">Multiplataforma</a></td></tr><tr><td class="noprint" colspan="3" style="text-align:left;"><div class="plainlinks wikidata-link" style="font-size: 0.85em">[<a href="https://www.wikidata.org/wiki/Q2407" class="extiw" title="d:Q2407">editar datos en Wikidata</a>]</div></td></tr></tbody></table> <figure class="mw-default-size" typeof="mw:File/Thumb"><a href="/wiki/Archivo:BjarneStroustrup.jpg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/d/da/BjarneStroustrup.jpg/220px-BjarneStroustrup.jpg" decoding="async" width="220" height="165" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/d/da/BjarneStroustrup.jpg/330px-BjarneStroustrup.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/d/da/BjarneStroustrup.jpg 2x" data-file-width="432" data-file-height="324" /></a><figcaption><a href="/wiki/Bjarne_Stroustrup" title="Bjarne Stroustrup">Bjarne Stroustrup</a>, creador de C++.</figcaption></figure> <p><b>C++</b> es un <a href="/wiki/Lenguaje_de_programaci%C3%B3n" title="Lenguaje de programación">lenguaje de programación</a> diseñado en 1979 por <a href="/wiki/Bjarne_Stroustrup" title="Bjarne Stroustrup">Bjarne Stroustrup</a>. La intención de su creación fue extender al lenguaje de programación <a href="/wiki/C_(lenguaje_de_programaci%C3%B3n)" title="C (lenguaje de programación)">C</a> y añadir mecanismos que permiten la manipulación de <a href="/wiki/Objeto_(programaci%C3%B3n)" title="Objeto (programación)">objetos</a>. En ese sentido, desde el punto de vista de los <a href="/wiki/Programaci%C3%B3n_orientada_a_objetos" title="Programación orientada a objetos">lenguajes orientados a objetos</a>, C++ es un lenguaje híbrido. </p><p>Posteriormente se añadieron facilidades de <a href="/wiki/Programaci%C3%B3n_gen%C3%A9rica" title="Programación genérica">programación genérica</a>, que se sumaron a los paradigmas de <a href="/wiki/Programaci%C3%B3n_estructurada" title="Programación estructurada">programación estructurada</a> y <a href="/wiki/Programaci%C3%B3n_orientada_a_objetos" title="Programación orientada a objetos">programación orientada a objetos</a>. Por esto se suele decir que el C++ es un <a href="/w/index.php?title=Lenguaje_de_programaci%C3%B3n_multiparadigma&action=edit&redlink=1" class="new" title="Lenguaje de programación multiparadigma (aún no redactado)">lenguaje de programación multiparadigma</a>. </p><p>Actualmente existe un estándar, denominado ISO C++, al que se han adherido la mayoría de los fabricantes de compiladores más modernos. Existen también algunos intérpretes, tales como ROOT. </p><p>El nombre «C++» fue propuesto por Rick Mascitti en el año 1983, cuando el lenguaje fue utilizado por primera vez fuera de un laboratorio científico. Antes se había usado el nombre «C con clases». En C++, la expresión «C++» significa «incremento de C» y se refiere a que C++ es una extensión de C. </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="Características_de_C++"><span id="Caracter.C3.ADsticas_de_C.2B.2B"></span>Características de C++</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=1" title="Editar sección: Características de C++"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li>Su sintaxis es heredada del lenguaje C.</li> <li>Programa orientado a objetos (POO).</li> <li>Permite la agrupación de instrucciones.</li> <li>Es portátil y tiene un gran número de compiladores en diferentes plataformas y sistemas operativos.</li> <li>Permite la separación de un programa en módulos que admiten compilación independiente.</li> <li>Es un lenguaje de alto nivel.</li></ul> <div class="mw-heading mw-heading2"><h2 id="Ejemplos">Ejemplos</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=2" title="Editar sección: Ejemplos"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>A continuación se cita un programa de ejemplo <a href="/wiki/Hola_mundo" title="Hola mundo">Hola mundo</a> escrito en C++: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><iostream></span> <span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span> <span class="p">{</span> <span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">"Hola mundo!"</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="p">}</span> </pre></div> <p>Al usar la directiva <code>#include</code> se le dice al compilador que busque e interprete todos los elementos definidos en el archivo que acompaña la directiva (en este caso, <code>iostream</code>). Para evitar sobrescribir los elementos ya definidos al ponerles igual nombre, se crearon los espacios de nombres o <code>namespace</code> del singular en inglés. En este caso hay un espacio de nombres llamado <code>std</code>, que es donde se incluyen las definiciones de todas las funciones y clases que conforman la <a href="/wiki/Biblioteca_(inform%C3%A1tica)" title="Biblioteca (informática)">biblioteca</a> estándar de C++. Al incluir la sentencia <code>using namespace std</code> le estamos diciendo al compilador que usaremos el espacio de nombres <code>std</code> por lo que no tendremos que incluirlo cuando usemos elementos de este espacio de nombres, como pueden ser los objetos <code>cout</code> y <code>cin</code>, que representan el flujo de salida estándar (típicamente la pantalla o una ventana de texto) y el flujo de entrada estándar (típicamente el teclado). </p><p>La definición de funciones es igual que en C, salvo por la característica de que si <code>main</code> no va a recoger argumentos, no tenemos por qué ponérselos, a diferencia de C, donde había que ponerlos explícitamente, aunque no se fueran a usar. Queda solo comentar que el símbolo <code><<</code> se conoce como operador de inserción, y <i>grosso modo</i> está enviando a <code>cout</code> lo que queremos mostrar por pantalla para que lo pinte, en este caso la cadena <code>"Hola mundo"</code>. El mismo operador <code><<</code> se puede usar varias veces en la misma sentencia, de forma que gracias a esta característica podremos concatenar el objeto <code>endl</code> al final, cuyo resultado será imprimir un retorno de línea. El operador += se utiliza para sumar el valor de la expresión a la variable a la que se le aplica. En este caso específico del código proporcionado, la línea «inverso += (contraseña % 10) * 100;» está sumando al valor actual de la variable «inverso» el resultado de multiplicar el último dígito de la variable «contraseña» por 100. Esto se repite para los otros dígitos de la contraseña para construir el número invertido. </p> <div class="mw-heading mw-heading2"><h2 id="Tipos_de_datos">Tipos de datos</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=3" title="Editar sección: Tipos de datos"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>C++ tiene los siguientes <a href="/wiki/Tipo_de_datos" class="mw-redirect" title="Tipo de datos">tipos</a> fundamentales: </p> <ul><li>Caracteres: <code>char</code> (también es un entero), <code>wchar_t</code></li> <li>Enteros: <code>short</code>, <code>int</code>, <code>long</code>, <code>long long</code></li> <li>Números en coma flotante: <code>float</code>, <code>double</code>, <code>long double</code></li> <li>Booleanos: <code>bool</code></li> <li>Vacío: <code>void</code></li></ul> <p>El modificador <code>unsigned</code> se puede aplicar a enteros para obtener números sin signo (por omisión los enteros contienen signo), con lo que se consigue un rango mayor de números naturales. </p> <div class="mw-heading mw-heading3"><h3 id="Tamaños_asociados"><span id="Tama.C3.B1os_asociados"></span><i>Tamaños asociados</i></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=4" title="Editar sección: Tamaños asociados"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Según la máquina y el compilador que se utilice los tipos primitivos pueden ocupar un determinado tamaño en memoria. La siguiente lista ilustra el número de bits que ocupan los distintos tipos primitivos en la arquitectura <a href="/wiki/X86" title="X86">x86</a>. </p> <table class="wikitable" align="right"> <caption><i>Tamaños de tipos primitivos bajo i386 (GCC)</i> </caption> <tbody><tr> <td><b>Tipo</b></td> <td><b>Número de bits</b> </td></tr> <tr> <td><code>char</code></td> <td>8 </td></tr> <tr> <td><code>short</code></td> <td>16 </td></tr> <tr> <td><code>int</code></td> <td>32 </td></tr> <tr> <td><code>float</code></td> <td>32 </td></tr> <tr> <td><code>double</code></td> <td>64 </td></tr></tbody></table> <p>Otras arquitecturas pueden requerir distintos tamaños de tipos de datos primitivos. C++ no dice nada acerca de cuál es el número de bits en un byte, ni del tamaño de estos tipos; más bien, ofrece solamente las siguientes «garantías de tipos»: </p> <ul><li>De acuerdo al estándar <a href="/wiki/C99" class="mw-redirect" title="C99">C99</a>, un tipo <code>char</code> debe ocupar exactamente un <i>byte</i> compuesto de un mínimo de 8 <i>bits</i> independientemente de la arquitectura de la máquina.</li> <li>El tamaño reconocido de <code>char</code> es de 1. Es decir, <code>sizeof(char)</code> siempre devuelve 1.</li> <li>Un tipo <code>short</code> tiene <i>al menos el mismo</i> tamaño que un tipo <code>char</code>.</li> <li>Un tipo <code>long</code> tiene <i>al menos el doble</i> tamaño en bytes que un tipo <code>short</code>.</li> <li>Un tipo <code>int</code> tiene un tamaño entre el de <code>short</code> y el de <code>long</code>, ambos incluidos, preferentemente el tamaño de un apuntador de memoria de la máquina. Su valor máximo es 2147483647, usando 32 bits.</li> <li>Un tipo <code>unsigned</code> tiene el mismo tamaño que su versión <code>signed</code>.</li></ul> <div class="mw-heading mw-heading3"><h3 id="Wchar_t">Wchar_t</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=5" title="Editar sección: Wchar_t"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Para la versión del estándar que se publicó en 1998, se decidió añadir el tipo de dato <code>wchar_t</code>, que permite el uso de caracteres <a href="/wiki/UNICODE" class="mw-redirect" title="UNICODE">UNICODE</a>, a diferencia del tradicional <code>char</code>, que contempla simplemente al código de caracteres ASCII extendido. A su vez, se ha definido para la mayoría de las funciones y clases, tanto de C como de C++, una versión para trabajar con <code>wchar_t</code>, donde usualmente se prefija el carácter <i>w</i> al nombre de la función (en ocasiones el carácter es un infijo). Por ejemplo: </p> <ul><li><code>strcpy - wstrcpy</code></li> <li><code>std::string - std::wstring</code></li> <li><code>std::cout - std::wcout</code></li></ul> <p>Cabe resaltar que en C se define <code>wchar_t</code> como: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">typedef</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">short</span><span class="w"> </span><span class="kt">wchar_t</span><span class="p">;</span> </pre></div> <p>Mientras que en C++ es en sí mismo un tipo de dato. </p> <div class="mw-heading mw-heading3"><h3 id="La_palabra_reservada_«void»"><span id="La_palabra_reservada_.C2.ABvoid.C2.BB"></span>La palabra reservada «void»</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=6" title="Editar sección: La palabra reservada «void»"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>La palabra reservada <code>void</code> define en C++ el concepto de no existencia o no atribución de un tipo en una variable o declaración. Es decir, una función declarada como <code>void</code> no devolverá ningún valor. Esta palabra reservada también puede usarse para indicar que una función no recibe parámetros, como en la siguiente declaración: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="nf">funcion</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="p">);</span> </pre></div> <p>Aunque la tendencia actual es la de no colocar la palabra «void». </p><p>Además se utiliza para determinar que una función no retorna un valor, como en: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">void</span><span class="w"> </span><span class="nf">funcion</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">parametro</span><span class="p">);</span> </pre></div> <p>Cabe destacar que <b><code>void</code> no es un tipo</b>. Una función como la declarada anteriormente no puede retornar un valor por medio de <tt>return</tt>: la palabra clave va sola. No es posible una declaración del tipo: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">void</span><span class="w"> </span><span class="n">t</span><span class="p">;</span><span class="w"> </span><span class="c1">//Está mal</span> </pre></div> <p>En este sentido, <code>void</code> se comporta de forma ligeramente diferente a como lo hace en C, especialmente en cuanto a su significado en declaraciones y prototipos de funciones. </p><p>Sin embargo, la forma especial <tt>void *</tt> indica que el tipo de datos es un puntero. Por ejemplo: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">memoria</span><span class="p">;</span> </pre></div> <p>Indica que <tt>memoria</tt> es un puntero a <i>alguna parte</i>, donde se guarda información de <i>algún tipo</i>. El <a href="/wiki/Programador" title="Programador">programador</a> es responsable de definir estos «algún», eliminando toda ambigüedad. Una ventaja de la declaración «void *» es que puede representar a la vez varios tipos de datos, dependiendo de la <a href="/wiki/Conversi%C3%B3n_de_tipos" title="Conversión de tipos">operación de <i>cast</i></a> escogida. La memoria que hemos apuntado en alguna parte, en el ejemplo anterior, bien podría almacenar un entero, un flotante, una cadena de texto o un programa, o combinaciones de estos. Es responsabilidad del programador recordar qué tipo de datos hay y garantizar el acceso adecuado. </p> <div class="mw-heading mw-heading3"><h3 id="La_palabra_«NULL»"><span id="La_palabra_.C2.ABNULL.C2.BB"></span>La palabra «NULL»</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=7" title="Editar sección: La palabra «NULL»"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Además de los valores que pueden tomar los tipos anteriormente mencionados, existe un valor llamado NULL, sea el caso numérico para los enteros, carácter para el tipo char, cadena de texto para el tipo string, etc. El valor NULL, expresa, por lo regular, la representación de una Macro, asignada al valor «0». </p><p>Tenemos entonces que: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">void</span><span class="o">*</span><span class="w"> </span><span class="n">puntero</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> <span class="kt">int</span><span class="w"> </span><span class="n">entero</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> <span class="kt">bool</span><span class="w"> </span><span class="n">boleana</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> <span class="kt">char</span><span class="w"> </span><span class="n">caracter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> </pre></div> <p>El valor de las variables anteriores nos daría 0. A diferencia de la variable «caracter», que nos daría el equivalente a NULL, «<tt>\0</tt>», para caracteres. </p><p>Para evitar ambigüedad en funciones sobrecargadas, puede emplearse la palabra clave <i>nullptr</i>. Esta palabra clave siempre representa un puntero. Por ejemplo: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">void</span><span class="w"> </span><span class="nf">f</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="p">);</span> <span class="kt">void</span><span class="w"> </span><span class="nf">f</span><span class="p">(</span><span class="n">foo</span><span class="w"> </span><span class="o">*</span><span class="n">a</span><span class="p">);</span> <span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">argc</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="o">**</span><span class="w"> </span><span class="n">argv</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">f</span><span class="p">(</span><span class="nb">NULL</span><span class="p">);</span><span class="w"> </span><span class="c1">// Se ejecuta f(int a)</span> <span class="w"> </span><span class="n">f</span><span class="p">(</span><span class="k">nullptr</span><span class="p">);</span><span class="w"> </span><span class="c1">// Se ejecuta f(foo *a)</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="p">}</span> </pre></div> <div class="mw-heading mw-heading2"><h2 id="Principios">Principios</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=8" title="Editar sección: Principios"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Todo programa en C++ debe tener la función principal <code>main()</code> (a no ser que se especifique en tiempo de compilación otro punto de entrada, que en realidad es la función que tiene el <code>main()</code>) </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span> <span class="p">{}</span> </pre></div> <p>La función principal del código fuente <tt>main</tt> debe tener uno de los siguientes prototipos:<br /> <tt>int main()</tt><br /> <tt>int main(int argc, char** argv)</tt><br /> </p><p>Aunque no es estándar algunas implementaciones permiten<br /> <tt>int main(int argc, char** argv, char** env)</tt><br /> </p><p>La primera es la forma por omisión de un programa que no recibe parámetros ni argumentos. La segunda forma tiene dos parámetros: <i>argc</i>, un número que describe el número de argumentos del programa (incluyendo el nombre del programa mismo), y <i>argv</i>, un puntero a un array de punteros, de <i>argc</i> elementos, donde el elemento <tt>argv[i]</tt> representa el <i>i</i>-ésimo argumento entregado al programa. En el tercer caso se añade la posibilidad de poder acceder a las variables de entorno de ejecución de la misma forma que se accede a los argumentos del programa, pero reflejados sobre la variable <i>env</i>. </p><p>El tipo de retorno de <tt>main</tt> es un valor entero <b>int</b>. Al finalizar la función <code>main</code>, debe incluirse el valor de retorno (por ejemplo, <tt>return 0;</tt>, aunque el estándar prevé solamente dos posibles valores de retorno: EXIT_SUCCESS y EXIT_FAILURE, definidas en el archivo <tt>cstdlib</tt>), o salir por medio de la función <tt>exit</tt>. Alternativamente puede dejarse en blanco, en cuyo caso el compilador es responsable de agregar la salida adecuada. </p> <div class="mw-heading mw-heading2"><h2 id="El_concepto_de_clase">El concepto de clase</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=9" title="Editar sección: El concepto de clase"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="VT rellink"><span style="font-size:88%">Véase también:</span> <i><a href="/wiki/Clase_(inform%C3%A1tica)" title="Clase (informática)">Clase (informática)</a></i></div> <p>Los objetos en C++ son abstraídos mediante una clase. Según el paradigma de la programación orientada a objetos un objeto consta de: </p> <ol><li>Identidad, que lo diferencia de otros objetos (Nombre que llevará la clase a la que pertenece dicho objeto).</li> <li>Métodos o funciones miembro.</li> <li>Atributos o variables miembro.</li></ol> <p>Un ejemplo de clase que podemos tomar es la clase perro. Cada perro comparte unas características (atributos). Su número de patas, el color de su pelaje o su tamaño son algunos de sus atributos. Las funciones que lo hagan ladrar, cambiar su comportamiento... esas son las funciones de la clase. </p><p>Este es otro ejemplo de una clase: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">Punto</span> <span class="p">{</span> <span class="c1">//por omisión, los miembros son 'private' para que solo se puedan modificar desde la propia clase.</span> <span class="k">private</span><span class="o">:</span> <span class="w"> </span><span class="c1">// Variable miembro privada</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">id</span><span class="p">;</span> <span class="k">protected</span><span class="o">:</span> <span class="w"> </span><span class="c1">// Variables miembro protegidas</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="p">;</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">y</span><span class="p">;</span> <span class="k">public</span><span class="o">:</span> <span class="w"> </span><span class="c1">// Constructor</span> <span class="w"> </span><span class="n">Punto</span><span class="p">();</span> <span class="w"> </span><span class="c1">// Destructor</span> <span class="w"> </span><span class="o">~</span><span class="n">Punto</span><span class="p">();</span> <span class="w"> </span><span class="c1">// Funciones miembro o métodos</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">ObtenerX</span><span class="p">();</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">ObtenerY</span><span class="p">();</span> <span class="p">};</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Constructores">Constructores</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=10" title="Editar sección: Constructores"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="VT rellink"><span style="font-size:88%">Véase también:</span> <i><a href="/wiki/Constructor_(inform%C3%A1tica)" title="Constructor (informática)">Constructor (informática)</a></i></div> <p>Son unos métodos especiales que se ejecutan automáticamente al crear un objeto de la clase. En su declaración no se especifica el tipo de dato que devuelven, y poseen el mismo nombre que la clase a la que pertenecen. Al igual que otros métodos, puede haber varios constructores sobrecargados, aunque no pueden existir constructores virtuales. </p><p>Como característica especial a la hora de implementar un constructor, justo después de la declaración de los parámetros, se encuentra lo que se llama «lista de inicializadores». Su objetivo es llamar a los constructores de los atributos que conforman el objeto a construir. </p><p>Cabe destacar que no es necesario declarar un constructor al igual que un destructor, pues el compilador lo puede hacer, aunque no es la mejor forma de programar. </p><p>Tomando el ejemplo de la Clase Punto, si deseamos que cada vez que se cree un objeto de esta clase las coordenadas del punto sean igual a cero podemos agregar un constructor como se muestra a continuación: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">Punto</span> <span class="p">{</span> <span class="w"> </span><span class="k">public</span><span class="o">:</span> <span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="n">x</span><span class="p">;</span><span class="w"> </span><span class="c1">// Coordenadas del punto</span> <span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="n">y</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Constructor</span> <span class="w"> </span><span class="n">Punto</span><span class="p">()</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">x</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span><span class="w"> </span><span class="n">y</span><span class="p">(</span><span class="mi">0</span><span class="p">){</span><span class="w"> </span><span class="c1">// Inicializamos las variables "x" e "y"</span> <span class="w"> </span><span class="p">}</span> <span class="p">};</span> <span class="c1">// Main para demostrar el funcionamiento de la clase</span> <span class="cp">#</span><span class="w"> </span><span class="cp">include</span><span class="w"> </span><span class="cpf"><iostream></span><span class="c1"> // Esto nos permite utilizar "cout"</span> <span class="k">using</span><span class="w"> </span><span class="k">namespace</span><span class="w"> </span><span class="nn">std</span><span class="p">;</span> <span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">Punto</span><span class="w"> </span><span class="n">MiPunto</span><span class="p">;</span><span class="w"> </span><span class="c1">// creamos un elemento de la clase Punto llamado MiPunto</span> <span class="w"> </span><span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">"Coordenada X: "</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">MiPunto</span><span class="p">.</span><span class="n">x</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">endl</span><span class="p">;</span><span class="w"> </span><span class="c1">// mostramos el valor acumulado en la variable x</span> <span class="w"> </span><span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">"Coordenada Y: "</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">MiPunto</span><span class="p">.</span><span class="n">y</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">endl</span><span class="p">;</span><span class="w"> </span><span class="c1">// mostramos el valor acumulado en la variable y</span> <span class="w"> </span><span class="n">getchar</span><span class="p">();</span><span class="w"> </span><span class="c1">// le indicamos al programa que espere al buffer de entrada (detenerse)</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="p">}</span> </pre></div> <p>Si compilamos y ejecutamos el anterior programa, obtenemos una salida que debe ser similar a la siguiente: </p><p>Coordenada X: 0 Coordenada Y: 0 </p><p>Existen varios tipos de constructores en C++: </p> <ol><li><b>Constructor predeterminado</b>. Es el constructor que no recibe ningún parámetro en la función. Si no se definiera ningún constructor, el sistema proporcionaría uno predeterminado. Es necesario para la construcción de estructuras y contenedores de la STL.</li> <li><b>Constructor de copia</b>. Es un constructor que recibe un objeto de la misma clase, y realiza una copia de los atributos del mismo. Al igual que el predeterminado, si no se define, el sistema proporciona uno.</li> <li><b>Constructor de conversión</b>. Este constructor, recibe como único parámetro, un objeto o variable de otro tipo distinto al suyo propio. Es decir, convierte un objeto de un tipo determinado a otro objeto del tipo que estamos generando.</li></ol> <p><b>Constructores + Memoria heap</b> Un objeto creado de la forma que se vio hasta ahora, es un objeto que vive dentro del scope(las llaves { }) en el que fue creado. Para que un objeto pueda seguir viviendo cuando se saque del scope en el que se creó, se lo debe crear en memoria heap. Para esto, se utiliza el operador new, el cual asigna memoria para almacenar al objeto creado, y además llama a su constructor(por lo que se le pueden enviar parámetros). El operador new se utiliza de la siguiente manera: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">Punto</span><span class="w"> </span><span class="o">*</span><span class="n">unPunto</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Punto</span><span class="p">();</span><span class="w"> </span><span class="c1">//esto llama al constructor que se describe más arriba</span> <span class="w"> </span><span class="k">delete</span><span class="w"> </span><span class="n">unPunto</span><span class="p">;</span><span class="w"> </span><span class="c1">//no hay que olvidarse de liberar la memoria ocupada por el objeto(ver la sección destructores, más abajo)</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="p">}</span> </pre></div> <p>Además, con el operador new[] se pueden crear arrays (colecciones o listas ordenadas) de tamaño dinámico: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="n">Punto</span><span class="w"> </span><span class="o">*</span><span class="nf">asignar</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">cuantos</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Punto</span><span class="p">[</span><span class="n">cuantos</span><span class="p">];</span><span class="w"> </span><span class="c1">//asigna un array de 'cuantos' puntos(se llama el constructor que se muestra más arriba), y se retorna.</span> <span class="p">}</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Destructores">Destructores</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=11" title="Editar sección: Destructores"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="VT rellink"><span style="font-size:88%">Véase también:</span> <i><a href="/wiki/Destructor_(inform%C3%A1tica)" title="Destructor (informática)">Destructor (informática)</a></i></div> <p>Los destructores son funciones miembro especiales llamadas automáticamente en la ejecución del programa, y por tanto <b>no tienen por qué ser llamadas explícitamente por el programador</b>. Sus principales cometidos son: </p> <ul><li>Liberar los recursos computacionales que el objeto de dicha clase haya adquirido en tiempo de ejecución al expirar este.</li> <li>Quitar los vínculos que pudiesen tener otros recursos u objetos con este.</li></ul> <p>Los destructores son invocados automáticamente al alcanzar el flujo del programa el fin del ámbito en el que está declarado el objeto. El único caso en el que se debe <b>invocar explícitamente al destructor de un objeto</b> es cuando este fue creado mediante el operador new, es decir, que este vive en memoria heap, y no en la pila de ejecución del programa. La invocación del destructor de un objeto que vive en heap se realiza a través del operador delete o delete[] para arrays. Ejemplo: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="o">*</span><span class="n">unEntero</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">int</span><span class="p">(</span><span class="mi">12</span><span class="p">);</span><span class="w"> </span><span class="c1">//asignamos un entero en memoria heap con el valor 12</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="o">*</span><span class="n">arrayDeEnteros</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">int</span><span class="p">[</span><span class="mi">25</span><span class="p">];</span><span class="w"> </span><span class="c1">//asignamos memoria para 25 enteros(no están inicializados)</span> <span class="w"> </span><span class="k">delete</span><span class="w"> </span><span class="n">unEntero</span><span class="p">;</span><span class="w"> </span><span class="c1">//liberamos la memoria que ocupaba unEntero</span> <span class="w"> </span><span class="k">delete</span><span class="p">[]</span><span class="w"> </span><span class="n">arrayDeEnteros</span><span class="p">;</span><span class="w"> </span><span class="c1">//liberamos la memoria ocupada por arrayDeEnteros</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="p">}</span> </pre></div> <p>Si no se utilizara el operador delete y delete[] en ese caso, la memoria ocupada por unEntero y arrayDeEnteros respectivamente, quedaría ocupada sin sentido. Cuando una porción de memoria queda ocupada por una variable que ya no se utiliza, y no hay forma de acceder a ella, se denomina un 'memory leak'. En aplicaciones grandes, si ocurren muchos memory leaks, el programa puede terminar ocupando bastante más memoria RAM de la que debería, lo que no es para nada conveniente. Es por esto, que el manejo de memoria heap debe usarse conscientemente. </p><p>Existen dos tipos de destructores pueden ser públicos o privados, según si se declaran: </p> <ul><li>Si es público se llama desde cualquier parte del programa para destruir el objeto.</li> <li>Si es privado no se permite la destrucción del objeto por el usuario.</li></ul> <p>El uso de destructores es clave en el concepto de <a href="/wiki/RAII" title="RAII">Adquirir Recursos es Inicializar</a>. </p> <div class="mw-heading mw-heading3"><h3 id="Funciones_miembro">Funciones miembro</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=12" title="Editar sección: Funciones miembro"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Función miembro es aquella que está declarada en ámbito de clase. Son similares a las funciones habituales, con la salvedad de que el compilador realizara el proceso de <b>Decoración de nombre</b> (<i>Name Mangling</i> en inglés): Cambiará el nombre de la función añadiendo un identificador de la clase en la que está declarada, pudiendo incluir caracteres especiales o identificadores numéricos. Este proceso es invisible al programador. Además, las funciones miembro reciben implícitamente un parámetro adicional: El puntero <tt>this</tt>, que referencia al objeto que ejecuta la función. </p><p>Las funciones miembro se invocan accediendo primero al objeto al cual refieren, con la sintaxis: <tt>myobject.mymemberfunction()</tt>, esto es un claro ejemplo de una función miembro. </p><p>Caso especial es el de las funciones miembro estáticas. A pesar de que son declaradas dentro de la clase, con el uso de la palabra clave <tt>static</tt> no recibirán el puntero <tt>this</tt>. Gracias a esto no es necesario crear ninguna instancia de la clase para llamar a esta función, sin embargo, solo se podrá acceder a los miembros estáticos de la clase dado que estos no están asociados al objeto sino al tipo. La sintaxis para llamar a esta función estática es <tt>mytype::mystaticmember()</tt>. </p> <div class="mw-heading mw-heading3"><h3 id="Funciones_amigas">Funciones amigas</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=13" title="Editar sección: Funciones amigas"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Utilizando la palabra reservada <code>friend</code> se pueden declarar funciones externas a una clase, conocidas como «funciones amigas», que puedan acceder a sus elementos privados y protegidos como harían si fuesen una función miembro. Estas no llevan el especificador de ámbito en su definición, tal y como haría un método miembro. Ejemplo: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><cstdlib></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><iostream></span> <span class="k">class</span><span class="w"> </span><span class="nc">Punto</span><span class="w"> </span><span class="p">{</span> <span class="k">public</span><span class="o">:</span> <span class="w"> </span><span class="n">Punto</span><span class="p">(</span><span class="kt">double</span><span class="w"> </span><span class="n">x_</span><span class="p">,</span><span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">y_</span><span class="p">)</span><span class="o">:</span><span class="w"> </span><span class="n">x</span><span class="p">{</span><span class="n">x_</span><span class="p">},</span><span class="w"> </span><span class="n">y</span><span class="p">{</span><span class="n">y_</span><span class="p">}</span><span class="w"> </span><span class="p">{}</span> <span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">getX</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">x</span><span class="p">;</span><span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">getY</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">y</span><span class="p">;</span><span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">friend</span><span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">distancia</span><span class="p">(</span><span class="n">Punto</span><span class="o">&</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">Punto</span><span class="o">&</span><span class="w"> </span><span class="n">b</span><span class="p">);</span><span class="w"> </span><span class="c1">// Distancia no es una función miembro</span> <span class="k">private</span><span class="o">:</span> <span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">y</span><span class="p">;</span><span class="w"> </span><span class="c1">// Atributos privados</span> <span class="p">};</span> <span class="c1">// Distancia de Manhattan</span> <span class="c1">// Nótese que no utiliza especificador de ámbito de la clase</span> <span class="kt">double</span><span class="w"> </span><span class="nf">distancia</span><span class="p">(</span><span class="n">Punto</span><span class="o">&</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">Punto</span><span class="o">&</span><span class="w"> </span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">abs</span><span class="p">(</span><span class="n">a</span><span class="p">.</span><span class="n">x</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">b</span><span class="p">.</span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">abs</span><span class="p">(</span><span class="n">a</span><span class="p">.</span><span class="n">y</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">b</span><span class="p">.</span><span class="n">y</span><span class="p">);</span><span class="w"> </span><span class="c1">// Accede a atributos privados</span> <span class="p">}</span> <span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">Punto</span><span class="w"> </span><span class="n">a</span><span class="p">{</span><span class="mi">3</span><span class="p">,</span><span class="mi">5</span><span class="p">},</span><span class="w"> </span><span class="n">b</span><span class="p">(</span><span class="mi">6</span><span class="p">,</span><span class="mi">1</span><span class="p">);</span> <span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">"A("</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">a</span><span class="p">.</span><span class="n">getX</span><span class="p">()</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">", "</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">a</span><span class="p">.</span><span class="n">getY</span><span class="p">()</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">")</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span> <span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">"B("</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">b</span><span class="p">.</span><span class="n">getX</span><span class="p">()</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">", "</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">b</span><span class="p">.</span><span class="n">getY</span><span class="p">()</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">")</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span> <span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">"Distancia(A,B): "</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">distancia</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="p">}</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Plantillas">Plantillas</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=14" title="Editar sección: Plantillas"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Las plantillas son el mecanismo de C++ para implantar el paradigma de la <a href="/wiki/Programaci%C3%B3n_gen%C3%A9rica" title="Programación genérica">programación genérica</a>. Permiten que una clase o función trabaje con tipos de datos abstractos, especificándose más adelante cuales son los que se quieren usar. Por ejemplo, es posible construir un vector genérico que pueda contener cualquier tipo de estructura de datos. De esta forma se pueden declarar objetos de la clase de este vector que contengan enteros, flotantes, polígonos, figuras, fichas de personal, etc. </p><p>La declaración de una plantilla se realiza anteponiendo la declaración <tt>template <typename A,....></tt> a la declaración de la estructura (clase, estructura o función) deseado. </p><p>Por ejemplo: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">template</span><span class="w"> </span><span class="o"><</span><span class="k">typename</span><span class="w"> </span><span class="nc">T</span><span class="o">></span> <span class="n">T</span><span class="w"> </span><span class="n">max</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="o">&</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="o">&</span><span class="n">y</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="n">y</span><span class="p">)</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">y</span><span class="p">;</span><span class="w"> </span><span class="c1">//si x > y, retorna x, sino retorna y</span> <span class="p">}</span> </pre></div> <p>La función <tt>max()</tt> es un ejemplo de programación genérica, y dados dos parámetros de un tipo T (que puede ser <tt>int</tt>, <tt>long</tt>, <tt>float</tt>, <tt>double</tt>, etc.) devolverá el mayor de ellos (usando el operador <tt>></tt>). Al ejecutar la función con parámetros de un cierto tipo, el compilador intentará «calzar» la plantilla a ese tipo de datos, o bien generará un mensaje de error si fracasa en ese proceso. </p> <div class="mw-heading mw-heading4"><h4 id="Especialización"><span id="Especializaci.C3.B3n"></span>Especialización</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=15" title="Editar sección: Especialización"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>El siguiente ejemplo: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">template</span><span class="w"> </span><span class="o"><</span><span class="k">typename</span><span class="w"> </span><span class="nc">A</span><span class="o">></span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">myfunction</span><span class="p">(</span><span class="n">A</span><span class="w"> </span><span class="n">a</span><span class="p">);</span> </pre></div> <p>crea una plantilla bajo la cual pueden ser definidas en el código de cabecera cualesquiera funciones especializadas para un tipo de datos como <tt>int myfunction(int), int myfunction(std::string), int myfunction(bool)</tt>, etcétera: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="nf">myfunction</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span> <span class="p">};</span> <span class="kt">int</span><span class="w"> </span><span class="nf">myfunction</span><span class="w"> </span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="w"> </span><span class="n">a</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="o">-</span><span class="n">a</span><span class="p">.</span><span class="n">size</span><span class="p">();</span> <span class="p">};</span> <span class="kt">int</span><span class="w"> </span><span class="nf">myfunction</span><span class="w"> </span><span class="p">(</span><span class="kt">bool</span><span class="w"> </span><span class="n">a</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">(</span><span class="n">a</span><span class="w"> </span><span class="o">&</span><span class="w"> </span><span class="n">rand</span><span class="p">());</span><span class="w"> </span><span class="c1">//Si a es verdadero, devuelve un número aleatorio; en caso contrario devuelve 0</span> <span class="p">};</span> </pre></div> <p>Cada una de estas funciones tiene su propia definición (cuerpo). Cada cuerpo diferente, no equivalente («no convertible») corresponde a una <b>especialización</b>. Si una de estas funciones no fuera definida, el compilador tratará de aplicar las conversiones de tipos de datos que le fuesen permitidas para «calzar» una de las plantillas, o generará un mensaje de error si fracasa en ese proceso. </p><p>Todas las definiciones habilitadas de una plantilla deben estar disponibles al momento de la compilación, por lo cual no es posible actualmente «compilar» una plantilla como archivo de objeto, sino simplemente compilar especializaciones de la plantilla. Por lo tanto, las plantillas se distribuyen junto con el código fuente de la aplicación. En otras palabras, no es posible compilar la plantilla <tt>std::vector< ></tt> a código objeto, pero sí es posible, por ejemplo, compilar un tipo de datos <tt>std::vector<std::string></tt>. </p> <div class="mw-heading mw-heading3"><h3 id="Clases_abstractas">Clases abstractas</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=16" title="Editar sección: Clases abstractas"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>En C++ es posible definir clases abstractas. Una clase abstracta, o clase base abstracta (ABC), es una que está diseñada solo como clase <i>padre</i> de las cuales se deben derivar clases hijas. Una clase abstracta se usa para representar aquellas entidades o métodos que después se implementarán en las clases derivadas, pero la clase abstracta en sí no contiene ninguna implementación -- solamente representa los métodos que se deben implementar. Por ello, no es posible instanciar una clase abstracta, pero sí una clase concreta que implemente los métodos definidos en ella. </p><p>Las clases abstractas son útiles para definir interfaces, es decir, un conjunto de métodos que definen el comportamiento de un módulo determinado. Estas definiciones pueden utilizarse sin tener en cuenta la implementación que se hará de ellos. </p><p>En C++ los métodos de las clases abstractas se definen como <a href="/wiki/Funci%C3%B3n_virtual" title="Función virtual">funciones virtuales</a> puras. </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">Abstracta</span> <span class="p">{</span> <span class="w"> </span><span class="k">public</span><span class="o">:</span> <span class="w"> </span><span class="k">virtual</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">metodo</span><span class="p">()</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="p">}</span> <span class="k">class</span><span class="w"> </span><span class="nc">ConcretaA</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Abstracta</span> <span class="p">{</span> <span class="w"> </span><span class="k">public</span><span class="o">:</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">metodo</span><span class="p">()</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">//haz algo</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="p">};</span> <span class="k">class</span><span class="w"> </span><span class="nc">ConcretaB</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Abstracta</span> <span class="p">{</span> <span class="w"> </span><span class="k">public</span><span class="o">:</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">metodo</span><span class="p">()</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">//otra implementación</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">baz</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="p">};</span> </pre></div> <p>En el ejemplo, la clase <tt>ConcretaA</tt> es una implementación de la clase <tt>Abstracta</tt>, y la clase <tt>ConcretaB</tt> es otra implementación. Debe notarse que el <tt>= 0</tt> es la notación que emplea C++ para definir funciones virtuales puras. </p> <div class="mw-heading mw-heading3"><h3 id="Espacios_de_nombres">Espacios de nombres</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=17" title="Editar sección: Espacios de nombres"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Una adición a las características de C son los <b>espacios de nombre</b> (<i>namespace</i> en inglés), los cuales pueden describirse como áreas virtuales bajo las cuales ciertos nombres de variable o tipos tienen validez. Esto permite evitar las ocurrencias de conflictos entre nombres de funciones, variables o clases. </p><p>El ejemplo más conocido en C++ es el espacio de nombres <tt>std::</tt>, el cual almacena todas las definiciones nuevas en C++ que difieren de C (algunas estructuras y funciones), así como las funcionalidades propias de C++ (<i>streams</i>) y los componentes de la <a href="/wiki/Standard_Template_Library" title="Standard Template Library">biblioteca STL</a>. </p><p>Por ejemplo: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#</span><span class="w"> </span><span class="cp">include</span><span class="w"> </span><span class="cpf"><iostream></span> <span class="c1">// Las funciones en esta cabecera existen dentro del espacio de nombres std::</span> <span class="k">namespace</span><span class="w"> </span><span class="nn">mi_paquete</span><span class="p">{</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">mi_valor</span><span class="p">;</span> <span class="p">};</span> <span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span> <span class="p">{</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">mi_valor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="n">mi_paquete</span><span class="o">::</span><span class="n">mi_valor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span> <span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">mi_valor</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="sc">'\n'</span><span class="p">;</span><span class="w"> </span><span class="c1">// imprime '3'</span> <span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">mi_paquete</span><span class="o">::</span><span class="n">mi_valor</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="sc">'\n'</span><span class="p">;</span><span class="w"> </span><span class="c1">// imprime '4'</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="p">}</span> </pre></div> <p>Como puede verse, las invocaciones directas a <i>mi_valor</i> darán acceso solamente a la variable descrita localmente; para acceder a la variable del espacio de nombres <i>mi_paquete</i> es necesario acceder específicamente el espacio de nombres. Un atajo recomendado para programas sencillos es la directiva <tt>using namespace</tt>, que permite acceder a los nombres de variables del paquete deseado en forma directa, siempre y cuando no se produzca alguna ambigüedad o conflicto de nombres. </p> <div class="mw-heading mw-heading3"><h3 id="Herencia">Herencia</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=18" title="Editar sección: Herencia"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Existen varios tipos de <a href="/wiki/Herencia_(programaci%C3%B3n_orientada_a_objetos)" class="mw-redirect" title="Herencia (programación orientada a objetos)">herencia</a> entre clases en el lenguaje de programación C++. Estos son: </p> <div class="mw-heading mw-heading4"><h4 id="Herencia_simple">Herencia simple</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=19" title="Editar sección: Herencia simple"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>La herencia en C++ es un mecanismo de abstracción creado para poder facilitar y mejorar el diseño de las clases de un programa. Con ella se pueden crear nuevas clases a partir de clases ya hechas, siempre y cuando tengan un tipo de relación especial. </p><p>En la herencia, las clases derivadas «heredan» los datos y las funciones miembro de las clases base, pudiendo las clases derivadas redefinir estos comportamientos (polimorfismo) y añadir comportamientos nuevos propios de las clases derivadas. Para no romper el principio de encapsulamiento (ocultar datos cuyo conocimiento no es necesario para el uso de las clases), se proporciona un nuevo modo de visibilidad de los datos/funciones: «<i>protected</i>». Cualquier cosa que tenga visibilidad protected se comportará como pública en la clase Base y en las que componen la jerarquía de herencia, y como privada en las clases que NO sean de la jerarquía de la herencia. </p><p>Antes de utilizar la herencia, nos tenemos que hacer una pregunta, y si tiene sentido, podemos intentar usar esta jerarquía: Si la frase <claseB> ES-UN <claseA> tiene sentido, entonces estamos ante un posible caso de herencia donde clase A será la clase base y clase B la derivada. </p><p>Ejemplo: clases Barco, Acorazado, Carguero, etc. Un Acorazado ES-UN Barco, un Carguero ES-UN Barco, un Trasatlántico ES-UN Barco, etc. </p><p>En este ejemplo tendríamos las cosas generales de un Barco (en C++) </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">Barco</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">protected</span><span class="o">:</span> <span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">nombre</span><span class="p">;</span> <span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="n">peso</span><span class="p">;</span> <span class="w"> </span><span class="k">public</span><span class="o">:</span> <span class="w"> </span><span class="c1">//Constructores y demás funciones básicas de barco</span> <span class="p">};</span> </pre></div> <p>y ahora las características de las clases derivadas, podrían (a la vez que heredan las de barco) añadir cosas propias del subtipo de barco que vamos a crear, por ejemplo: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">Carguero</span><span class="o">:</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Barco</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1">// Esta es la manera de especificar que hereda de Barco</span> <span class="w"> </span><span class="k">private</span><span class="o">:</span> <span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="n">carga</span><span class="p">;</span> <span class="w"> </span><span class="c1">//El resto de cosas</span> <span class="p">};</span> <span class="k">class</span><span class="w"> </span><span class="nc">Acorazado</span><span class="o">:</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Barco</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">private</span><span class="o">:</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">numeroArmas</span><span class="p">;</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">Soldados</span><span class="p">;</span> <span class="w"> </span><span class="c1">// El resto de cosas</span> <span class="p">};</span> </pre></div> <p>Por último, hay que mencionar que existen 3 clases de herencia que se diferencian en el modo de manejar la visibilidad de los componentes de la clase resultante: </p> <ul><li>Herencia pública (class Derivada: public Base ): Con este tipo de herencia se respetan los comportamientos originales de las visibilidades de la clase Base en la clase Derivada.</li> <li>Herencia privada (clase Derivada: private Base): Con este tipo de herencia todo componente de la clase Base, será privado en la clase Derivada (las propiedades heredadas serán privadas aunque estas sean públicas en la clase Base)</li> <li>Herencia protegida (clase Derivada: protected Base): Con este tipo de herencia, todo componente público y protegido de la clase Base, será protegido en la clase Derivada, y los componentes privados, siguen siendo privados.</li></ul> <div class="mw-heading mw-heading4"><h4 id="Herencia_múltiple"><span id="Herencia_m.C3.BAltiple"></span>Herencia múltiple</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=20" title="Editar sección: Herencia múltiple"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>La <a href="/wiki/Herencia_m%C3%BAltiple" title="Herencia múltiple">herencia múltiple</a> es el mecanismo que permite al programador hacer clases derivadas a partir, no de una sola clase base, sino de varias. Para entender esto mejor, pongamos un ejemplo: Cuando ves a quien te atiende en una tienda, como persona que es, podrás suponer que puede hablar, comer, andar, pero, por otro lado, como empleado que es, también podrás suponer que tiene un jefe, que puede cobrarte dinero por la compra, que puede devolverte el cambio, etc. Si esto lo trasladamos a la programación sería herencia múltiple (clase empleado_tienda): </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">Persona</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="p">...</span> <span class="w"> </span><span class="n">Hablar</span><span class="p">();</span> <span class="w"> </span><span class="n">Caminar</span><span class="p">();</span> <span class="w"> </span><span class="p">...</span> <span class="p">};</span> <span class="k">class</span><span class="w"> </span><span class="nc">Empleado</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">Persona</span><span class="w"> </span><span class="n">jefe</span><span class="p">;</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">sueldo</span><span class="p">;</span> <span class="w"> </span><span class="n">Cobrar</span><span class="p">();</span> <span class="w"> </span><span class="p">...</span> <span class="p">};</span> <span class="k">class</span><span class="w"> </span><span class="nc">EmpleadoTienda</span><span class="o">:</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Persona</span><span class="p">,</span><span class="w"> </span><span class="n">Empleado</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="p">...</span> <span class="w"> </span><span class="n">AlmacenarStock</span><span class="p">();</span> <span class="w"> </span><span class="n">ComprobarExistencias</span><span class="p">();</span> <span class="w"> </span><span class="p">...</span> <span class="p">};</span> </pre></div> <p>Por tanto, es posible utilizar más de una clase para que otra herede sus características. </p> <div class="mw-heading mw-heading3"><h3 id="Sobrecarga_de_operadores">Sobrecarga de operadores</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=21" title="Editar sección: Sobrecarga de operadores"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>La sobrecarga de operadores es una forma de hacer <a href="/wiki/Polimorfismo_(programaci%C3%B3n_orientada_a_objetos)" class="mw-redirect" title="Polimorfismo (programación orientada a objetos)">polimorfismo</a>. Es posible definir el comportamiento de un operador del lenguaje para que trabaje con tipos de datos definidos por el usuario. No todos los operadores de C++ son factibles de sobrecargar, y, entre aquellos que pueden ser sobrecargados, se deben cumplir condiciones especiales. En particular, los operadores <tt>sizeof</tt> y <tt>::</tt> no son sobrecargables. </p><p>No es posible en C++ crear un operador nuevo. </p><p>Los comportamientos de los operadores sobrecargados se implementan de la misma manera que una función, salvo que esta tendrá un nombre especial: <code><i>Tipo de dato de devolución</i> <b>operator<token del operador></b>(<i>parámetros</i>)</code> </p><p>Los siguientes operadores pueden ser sobrecargados: </p> <ul><li>Operadores Unarios <ul><li>Operador * (de indirección)</li> <li>Operador -> (de indirección)</li> <li>Operador & (de dirección)</li> <li>Operador +</li> <li>Operador -</li> <li>Operador ++</li> <li>Operador --</li></ul></li> <li>Operadores Binarios <ul><li>Operador ==</li> <li>Operador +</li> <li>Operador -</li> <li>Operador *</li> <li>Operador /</li> <li>Operador %</li> <li>Operador <<</li> <li>Operador >></li> <li>Operador &</li> <li>Operador ^</li> <li>Operador |</li> <li>Operador []</li> <li>Operador ()</li></ul></li> <li>Operadores de Asignación <ul><li>Operador =</li> <li>Operador +=</li> <li>Operador -=</li> <li>Operador *=</li> <li>Operador /=</li> <li>Operador %=</li> <li>Operador <<=</li> <li>Operador >>=</li> <li>Operador &=</li> <li>Operador ^=</li> <li>Operador |=</li></ul></li></ul> <p>Dado que estos operadores son definidos para un tipo de datos definido por el usuario, este es libre de asignarles cualquiera semántica que desee. Sin embargo, se considera de primera importancia que las semánticas sean tan parecidas al comportamiento natural de los operadores como para que el uso de los operadores sobrecargados sea intuitivo. Por ejemplo, el uso del operador unario - debiera cambiar el «signo» de un «valor». </p><p>Los operadores sobrecargados no dejan de ser funciones, por lo que pueden devolver un valor, si este valor es del tipo de datos con el que trabaja el operador, permite el encadenamiento de sentencias. Por ejemplo, si tenemos 3 variables A, B y C de un tipo T y sobrecargamos el operador = para que trabaje con el tipo de datos T, hay dos opciones: si el operador no devuelve nada una sentencia como «A=B=C;» (sin las comillas) daría error, pero si se devuelve un tipo de datos T al implementar el operador, permitiría concatenar cuantos elementos se quisieran, permitiendo algo como «A=B=C=D=...;» </p> <div class="mw-heading mw-heading2"><h2 id="Standard_Template_Library_(STL)"><span id="Standard_Template_Library_.28STL.29"></span>Standard Template Library (STL)</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=22" title="Editar sección: Standard Template Library (STL)"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="noprint AP rellink"><span style="font-size:88%">Artículo principal:</span> <i><a href="/wiki/Standard_Template_Library" title="Standard Template Library"> Standard Template Library</a></i></div> <p>Los lenguajes de programación suelen tener una serie de bibliotecas de funciones integradas para la manipulación de datos a nivel más básico. En C++, además de poder usar las bibliotecas de <a href="/wiki/Lenguaje_de_programaci%C3%B3n_C" class="mw-redirect" title="Lenguaje de programación C">C</a>, se puede usar la nativa STL (Standard Template Library), propia del lenguaje. Proporciona una serie <a href="/wiki/Plantillas" class="mw-redirect" title="Plantillas">plantillas</a> (templates) que permiten efectuar operaciones sobre el almacenado de datos, procesado de entrada/salida. </p> <div class="mw-heading mw-heading2"><h2 id="Biblioteca_de_entrada_y_salida">Biblioteca de entrada y salida</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=23" title="Editar sección: Biblioteca de entrada y salida"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Las clases <b>basic_ostream</b> y <b>basic_stream</b>, y los objetos <b>cout</b> y <b>cin</b>, proporcionan la entrada y salida estándar de datos (teclado/pantalla). También está disponible <b>cerr</b>, similar a cout, usado para la salida estándar de errores. Estas clases tienen sobrecargados los operadores << y >>, respectivamente, con el objeto de ser útiles en la inserción/extracción de datos a dichos flujos. Son operadores inteligentes, ya que son capaces de adaptarse al tipo de datos que reciben, aunque tendremos que definir el comportamiento de dicha entrada/salida para clases/tipos de datos definidos por el usuario. Por ejemplo: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="n">ostream</span><span class="o">&</span><span class="w"> </span><span class="k">operator</span><span class="o"><<</span><span class="p">(</span><span class="n">ostream</span><span class="o">&</span><span class="w"> </span><span class="n">fs</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">Punto</span><span class="o">&</span><span class="w"> </span><span class="n">punto</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">fs</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">punto</span><span class="p">.</span><span class="n">x</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">","</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">punto</span><span class="p">.</span><span class="n">y</span><span class="p">;</span> <span class="p">}</span> </pre></div> <p>De esta forma, para mostrar un punto, solo habría que realizar la siguiente expresión: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">//...</span> <span class="n">Punto</span><span class="w"> </span><span class="nf">p</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="mi">5</span><span class="p">);</span> <span class="c1">//...</span> <span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">"Las coordenadas son: "</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">p</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">endl</span><span class="p">;</span> <span class="c1">//...</span> </pre></div> <p>Es posible formatear la entrada/salida, indicando el número de dígitos decimales a mostrar, si los textos se pasarán a minúsculas o mayúsculas, si los números recibidos están en formato <a href="/wiki/Sistema_octal" title="Sistema octal">octal</a> o <a href="/wiki/Sistema_hexadecimal" title="Sistema hexadecimal">hexadecimal</a>, etc. </p> <div class="mw-heading mw-heading3"><h3 id="Fstreams">Fstreams</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=24" title="Editar sección: Fstreams"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Tipo de flujo para el manejo de ficheros. La definición previa de <i>ostreams/istreams</i> es aplicable a este apartado. Existen tres clases (ficheros de lectura, de escritura o de lectura/escritura): <b>ifstream</b>,<b>ofstream</b> y <b>fstream</b>. </p><p>Como abrir un fichero: </p><p>(nombre_variable_fichero).open("nombre_fichero.dat/txt", ios::in); para abrirlo en modo lectura. </p><p>(nombrevariablefichero).open("nombre_fichero.dat/txt", ios::out); para abrirlo en modo escritura. </p><p>Ejemplo: f.open("datos.txt", ios::in); </p><p>Como cerrar el fichero: </p><p>nombre_variable_fichero.close(); </p><p>Ejemplo: f.close(); </p><p>Leer un fichero: </p> <pre>1-Si es fichero de texto plano: </pre> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><fstream></span> <span class="w"> </span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><string></span> <span class="w"> </span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><iostream></span> <span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="k">namespace</span><span class="w"> </span><span class="nn">std</span><span class="p">;</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">ifstream</span><span class="w"> </span><span class="n">entrada</span><span class="p">;</span> <span class="w"> </span><span class="n">entrada</span><span class="p">.</span><span class="n">open</span><span class="p">(</span><span class="s">"textoPlano.txt"</span><span class="p">);</span> <span class="w"> </span><span class="n">string</span><span class="w"> </span><span class="n">unString</span><span class="p">;</span> <span class="w"> </span><span class="k">while</span><span class="p">(</span><span class="n">entrada</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="n">unString</span><span class="p">)</span> <span class="w"> </span><span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">"Lei: "</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">unString</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">endl</span><span class="p">;</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> </pre></div> <pre>2-Si es un fichero binario(.dat); nombre_variable_fichero.read((char*)&nombre_variable, sizeof(tipo_variable)); </pre> <pre>Ejemplo: </pre> <pre>f.read((char*)&e, sizeof(int)); </pre> <p>Escribir un fichero: </p> <pre>1-Si es fichero de texto(.txt): nombrevariable<<"texto"; donde "texto" puede ser también una variable de cualquier tipo primitivo, o un string. </pre> <pre> Ejemplo: f<<HOLA; </pre> <pre>2-Si es un fichero binario(.dat); nombre_variable_fichero.write((char*)&nombre_variable, sizeof(tipo_variable)); </pre> <pre>Ejemplo: </pre> <pre>f.write((char*)&e, sizeof(int)); </pre> <p>Pueden abrirse pasando al constructor los parámetros relativos a la ubicación del fichero y el modo de apertura: </p> <div class="mw-heading mw-heading3"><h3 id="Sstreams">Sstreams</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=25" title="Editar sección: Sstreams"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Se destacan dos clases, <b>ostringstream</b> e <b>istringstream</b>. Todo lo anteriormente dicho es aplicable a estas clases. Tratan a una cadena como si de un flujo de datos se tratase. ostringstream permite elaborar una cadena de texto insertando datos cual flujo, e istringstream puede extraer la información contenida en una cadena (pasada como parámetro en su constructor) con el operador <code>>></code>. Ejemplos: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="n">ostringstream</span><span class="w"> </span><span class="n">s</span><span class="p">;</span> <span class="n">s</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">nombre</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">","</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">edad</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">","</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">estatura</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">","</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">punto</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="mi">6</span><span class="p">)</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">endl</span><span class="p">;</span> <span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">s</span><span class="p">.</span><span class="n">str</span><span class="p">();</span> <span class="n">istringstream</span><span class="w"> </span><span class="nf">s</span><span class="p">(</span><span class="n">cadena</span><span class="p">);</span> <span class="n">s</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="n">nombre</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="n">edad</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="n">estatura</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="n">p</span><span class="p">;</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Contenedores">Contenedores</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=26" title="Editar sección: Contenedores"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Son clases plantillas especiales utilizadas para almacenar tipos de datos genéricos, sean cuales sean. Todos los contenedores son homogéneos, es decir, una vez que se declaran para contener un tipo de dato determinado, en ese contenedor, solo se podrán meter elementos de ese tipo. Según la naturaleza del almacenado, disponemos de varios tipos: </p> <ul><li>Vectores: Se definen por <pre>vector<tipo_de_dato> nombre_del_vector;</pre> Son arrays (o listas ordenadas) que se redimensionan automáticamente al agregar nuevos elementos, por lo que se le pueden agregar «teóricamente», infinitos elementos. Los vectores nos permiten acceder a cualquier elemento que contenga, mediante el operador[]. Debe tenerse en cuenta que si se intenta acceder a una posición que excede los límites del vector, este no hará ningún chequeo, por lo que se debe ser cuidadoso al utilizar este operador. Para asegurar un acceso seguro al vector, se puede utilizar el método at(int), que lanza una excepción de tipo std::out_of_range en caso de que esto ocurra.</li></ul> <p>Para añadir elementos al final del vector, se utiliza el método push_back(const T&). Por otro lado, para eliminar un elemento del final del vector, se debe usar el método pop_back(). </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><vector></span><span class="c1"> //librería que contiene a la clase vector</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><iostream></span> <span class="k">using</span><span class="w"> </span><span class="k">namespace</span><span class="w"> </span><span class="nn">std</span><span class="p">;</span> <span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span><span class="w"> </span><span class="n">intVector</span><span class="p">;</span><span class="w"> </span><span class="c1">//crea un vector de enteros (sin elementos)</span> <span class="w"> </span><span class="n">intVector</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="mi">25</span><span class="p">);</span><span class="w"> </span><span class="c1">//agrega el entero 25 al vector</span> <span class="w"> </span><span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">"El primer elemento es: "</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">intVector</span><span class="p">.</span><span class="n">front</span><span class="p">()</span><span class="w"> </span><span class="o"><<</span> <span class="w"> </span><span class="s">" y mi vector tiene "</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">intVector</span><span class="p">.</span><span class="n">size</span><span class="p">()</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">" elementos."</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">endl</span><span class="p">;</span><span class="w"> </span><span class="c1">//imprime el primer elemento, retornado por el método front()</span> <span class="w"> </span><span class="n">intVector</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="mi">32</span><span class="p">);</span><span class="w"> </span><span class="c1">//agrego el entero 32 al vector</span> <span class="w"> </span><span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">"El primer elemento es: "</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">intVector</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">endl</span><span class="p">;</span><span class="w"> </span><span class="c1">//imprime 25</span> <span class="w"> </span><span class="n">intVector</span><span class="p">.</span><span class="n">pop_back</span><span class="p">();</span><span class="w"> </span><span class="c1">//elimina el último elemento del vector (i. e. 32)</span> <span class="w"> </span><span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">"Ahora tengo: "</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">intVector</span><span class="p">.</span><span class="n">size</span><span class="p">()</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">" elementos."</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">endl</span><span class="p">;</span><span class="w"> </span><span class="c1">//imprimirá 1</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="p">}</span> </pre></div> <ul><li>Colas dobles: son parecidas a los vectores, pero tienen mejor eficiencia para agregar o eliminar elementos en las «puntas».<pre>deque<tipo_de_dato> nombre_de_la_cola;</pre></li></ul> <p>Además de los métodos push_back(const T&) y pop_back(), se agregan los métodos push_front(const T&) y pop_front(), que realizan lo mismo que los ya explicados, pero en el comienzo de la cola. </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><deque></span><span class="c1"> //librería de deques</span> <span class="k">using</span><span class="w"> </span><span class="k">namespace</span><span class="w"> </span><span class="nn">std</span><span class="p">;</span> <span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">deque</span><span class="o"><</span><span class="kt">int</span><span class="o">></span><span class="w"> </span><span class="n">intDeque</span><span class="p">;</span> <span class="w"> </span><span class="n">intDeque</span><span class="p">.</span><span class="n">push_front</span><span class="p">(</span><span class="mi">25</span><span class="p">);</span> <span class="w"> </span><span class="n">intDeque</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="mi">12</span><span class="p">);</span> <span class="w"> </span><span class="k">while</span><span class="p">(</span><span class="n">intDeque</span><span class="p">.</span><span class="n">size</span><span class="p">())</span> <span class="w"> </span><span class="n">intDeque</span><span class="p">.</span><span class="n">pop_back</span><span class="p">();</span><span class="w"> </span><span class="c1">//borra todos los elementos</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="p">}</span> </pre></div> <ul><li>Listas: Son eficientes a la hora de agregar elementos. La diferencia con las colas dobles, es que son más eficientes para eliminar elementos que no estén en alguna de las «puntas»<pre>list<tipo_de_dato> nombre_de_la_lista;</pre></li> <li>Adaptadores de secuencia.</li> <li>Contenedores asociativos: map y multimap, que permiten asociar una «clave» con un «valor». map no permite valores repetidos, mientras que multimap si.</li></ul> <pre>map<tipo_de_llave, tipo_de_dato> nombre_del_map; multimap<tipo_de_llave, tipo_de_dato> nombre_del_multimap; </pre> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><map></span><span class="c1"> //librería que contiene a map y multimap</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><string></span><span class="c1"> //librería de strings</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><iostream></span><span class="c1"> //librería de entrada/salida</span> <span class="k">using</span><span class="w"> </span><span class="k">namespace</span><span class="w"> </span><span class="nn">std</span><span class="p">;</span> <span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">map</span><span class="o"><</span><span class="kt">int</span><span class="p">,</span><span class="w"> </span><span class="n">string</span><span class="o">></span><span class="w"> </span><span class="n">intAString</span><span class="p">;</span> <span class="w"> </span><span class="n">intAString</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"uno"</span><span class="p">;</span> <span class="w"> </span><span class="n">intAString</span><span class="p">[</span><span class="mi">10</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"diez"</span><span class="p">;</span> <span class="w"> </span><span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">"En intAString[1]: "</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">intAString</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">endl</span><span class="p">;</span> <span class="w"> </span><span class="n">cout</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="s">"En intAString[10]: "</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">intAString</span><span class="p">[</span><span class="mi">10</span><span class="p">]</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">endl</span><span class="p">;</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="p">}</span> </pre></div> <ul><li>Contenedores asociativos: set y multiset, que ofrecen solamente la condición de «pertenencia», sin la necesidad de garantizar un ordenamiento particular de los elementos que contienen.</li></ul> <div class="mw-heading mw-heading3"><h3 id="Iteradores">Iteradores</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=27" title="Editar sección: Iteradores"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Pueden considerarse como una generalización de la clase de «puntero». Un iterador es un tipo de dato que permite el recorrido y la búsqueda de elementos en los contenedores. Como las estructuras de datos (contenedores) son clases genéricas, y los operadores (algoritmos) que deben operar sobre ellas son también genéricos (funciones genéricas), Stepanov y sus colaboradores tuvieron que desarrollar el concepto de iterador como elemento o nexo de conexión entre ambos. El nuevo concepto resulta ser una especie de punteros que señalan a los diversos miembros del contenedor (punteros genéricos que como tales no existen en el lenguaje). </p> <div class="mw-heading mw-heading3"><h3 id="Algoritmos">Algoritmos</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=28" title="Editar sección: Algoritmos"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Combinando la utilización de templates y un estilo específico para denotar tipos y variables, la STL ofrece una serie de funciones que representan operaciones comunes, y cuyo objetivo es «parametrizar» las operaciones en que estas funciones se ven involucradas de modo que su lectura, comprensión y mantenimiento, sean más fáciles de realizar. </p><p> Un ejemplo es la función <tt>copy</tt>, la cual simplemente copia variables desde un lugar a otro. Más estrictamente, copia los contenidos cuyas ubicaciones están delimitadas por dos iteradores, al espacio indicado por un tercer iterador. La sintaxis es: </p><pre>copy (inicio_origen, fin_origen, inicio_destino);</pre><p> De este modo, todos los datos que están entre inicio_origen y fin_origen, excluyendo el dato ubicado en este último, son copiados a un lugar descrito o apuntado por inicio_destino. </p><p>Un algoritmo muy importante que viene implementado en la biblioteca STL, es el sort. El algoritmo sort, ordena cualquier tipo de contenedor, siempre y cuando se le pasen como argumentos, desde donde y hasta donde se quiere ordenarlo. </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><vector></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><deque></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><algorithm></span> <span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span><span class="w"> </span><span class="n">intVector</span><span class="p">;</span> <span class="w"> </span><span class="n">intVector</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="mi">60</span><span class="p">);</span> <span class="w"> </span><span class="n">intVector</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="mi">12</span><span class="p">);</span> <span class="w"> </span><span class="n">intVector</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="mi">54</span><span class="p">);</span><span class="w"> </span><span class="c1">//para este momento, el vector tiene 60,12,54</span> <span class="w"> </span><span class="n">sort</span><span class="p">(</span><span class="n">intVector</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span><span class="w"> </span><span class="n">intVector</span><span class="p">.</span><span class="n">end</span><span class="p">());</span><span class="w"> </span><span class="c1">//listo, array ordenado, ahora tiene 12,54,60</span> <span class="w"> </span><span class="cm">/*Notar que si en vez de un vector, fuese una deque, se ordenaría de la misma manera. */</span> <span class="p">}</span> </pre></div> <p>Entre las funciones más conocidas están <tt>swap (variable1, variable2)</tt>, que simplemente intercambia los valores de variable1 y variable2; <tt>max (variable1, variable2)</tt> y su símil <tt>min (variable1, variable2)</tt>, que retornan el máximo o mínimo entre dos valores; <tt>find (inicio, fin, valor)</tt> que busca valor en el espacio de variables entre inicio y fin; etcétera. </p><p>Los algoritmos son muy variados, algunos incluso tienen versiones específicas para operar con ciertos iteradores o contenedores, y proveen un nivel de abstracción extra que permite obtener un código más «limpio», que «describe» lo que se está haciendo, en vez de hacerlo paso a paso explícitamente. </p> <div class="mw-heading mw-heading2"><h2 id="C++11"><span id="C.2B.2B11"></span>C++11</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=29" title="Editar sección: C++11"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="noprint AP rellink"><span style="font-size:88%">Artículo principal:</span> <i><a href="/wiki/C%2B%2B11" title="C++11"> C++11</a></i></div> <p>El 12 de agosto de 2011, Herb Sutter, presidente del comité de estándares de C++, informó la aprobación unánime del nuevo estándar.<sup id="cite_ref-3" class="reference separada"><a href="#cite_note-3"><span class="corchete-llamada">[</span>3<span class="corchete-llamada">]</span></a></sup>​ La publicación del mismo se realizó en algún momento del 2011. </p><p>Entre las características del nuevo estándar se pueden destacar: </p> <ul><li>Funciones <a href="/wiki/C%C3%A1lculo_lambda" title="Cálculo lambda">lambda</a>;</li> <li>Referencias rvalue;</li> <li>La palabra reservada <tt>auto</tt>;</li> <li>Inicialización uniforme;</li> <li>Plantillas con número variable de argumentos.</li></ul> <p>Además se ha actualizado la <a href="/wiki/Biblioteca_est%C3%A1ndar_de_C%2B%2B" title="Biblioteca estándar de C++">biblioteca estándar</a> del lenguaje. </p> <div class="mw-heading mw-heading2"><h2 id="Actualidad_y_futuro">Actualidad y futuro</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=30" title="Editar sección: Actualidad y futuro"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>En 2011 C++11 inauguró una nueva era en la historia de C++, iniciando un ciclo trienal de lanzamiento de nuevas versiones. A C++11 le siguió <a href="/wiki/C%2B%2B14" title="C++14">C++14</a> y luego <a href="/wiki/C%2B%2B17" title="C++17">C++17</a>, que es la versión actual en 2019; C++20 se encuentra próximo a estandarizarse, y ya se está trabajando en la versión C++23. Los compiladores intentan adelantarse incorporando de manera experimental algunas novedades antes de los lanzamientos oficiales. Pero cada nueva versión de C++ incluye tal cantidad de agregados que los compiladores más adelantados no suelen terminar de incorporarlos hasta dos o tres años después del lanzamiento de esa versión. </p> <div class="mw-heading mw-heading2"><h2 id="Diferencias_de_tipos_respecto_a_C">Diferencias de tipos respecto a C</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=31" title="Editar sección: Diferencias de tipos respecto a C"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>En C++, cualquier tipo de datos que sea <i>declarado completo</i> (<i>fully qualified</i>, en inglés) se convierte en un tipo de datos único. Las condiciones para que un tipo de datos <tt>T</tt> sea <i>declarado completo</i> son <i>a grandes rasgos</i> las siguientes: </p> <ul><li>Es posible al momento de compilación conocer el espacio asociado al tipo de datos (es decir, el compilador debe conocer el resultado de <tt>sizeof(T)</tt>).</li> <li><tt>T</tt> Tiene al menos un constructor, y un destructor, <i>bien declarados</i>.</li> <li>Si <tt>T</tt> es un tipo compuesto, o es una clase derivada, o es la especificación de una plantilla, o cualquier combinación de las anteriores, entonces las dos condiciones establecidas previamente deben aplicar para cada tipo de dato constituyente.</li></ul> <p>En general, esto significa que cualquier tipo de datos definido haciendo uso de las cabeceras completas, es un tipo de datos completo. </p><p>En particular, y, a diferencia de lo que ocurría en C, <b>los tipos definidos por medio de <tt>struct</tt> o <tt>enum</tt> son tipos completos</b>. Como tales, ahora son sujetos a sobrecarga, conversiones implícitas, etcétera. </p><p>Los <b>tipos enumerados</b>, entonces, ya no son simplemente alias para tipos enteros, sino que son tipos de datos únicos en C++. El tipo de datos <b>bool</b>, igualmente, pasa a ser un tipo de datos único, mientras que en C funcionaba en algunos casos como un alias para alguna clase de dato de tipo entero. </p> <div class="mw-heading mw-heading2"><h2 id="Compiladores">Compiladores</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=32" title="Editar sección: Compiladores"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Uno de los compiladores <a href="/wiki/Software_libre" title="Software libre">libres</a> de C++ es el de <a href="/wiki/GNU" title="GNU">GNU</a>, el compilador <a href="/wiki/G%2B%2B" title="G++">G++</a> (parte del proyecto <a href="/wiki/GNU_Compiler_Collection" title="GNU Compiler Collection">GCC</a>, que engloba varios compiladores para distintos lenguajes). Otros compiladores comunes son <a href="/wiki/Intel_C%2B%2B_Compiler" title="Intel C++ Compiler">Intel C++ Compiler</a>, el compilador de <a href="/wiki/Xcode" title="Xcode">Xcode</a>, el compilador de <a href="/wiki/Borland_C%2B%2B" class="mw-redirect" title="Borland C++">Borland C++</a>, el compilador de CodeWarrior C++, el compilador g++ de <a href="/wiki/Cygwin" title="Cygwin">Cygwin</a>, el compilador g++ de <a href="/wiki/MinGW" title="MinGW">MinGW</a>, el compilador de <a href="/wiki/Visual_C%2B%2B" class="mw-redirect" title="Visual C++">Visual C++</a>, <a href="/wiki/Carbide.c%2B%2B" title="Carbide.c++">Carbide.c++</a>, entre otros. </p> <div class="mw-heading mw-heading2"><h2 id="Entornos_de_desarrollo">Entornos de desarrollo</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=33" title="Editar sección: Entornos de desarrollo"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="VT rellink"><span style="font-size:88%">Véase también:</span> <i><a href="/wiki/Entorno_de_desarrollo_integrado" title="Entorno de desarrollo integrado">Entorno de desarrollo integrado</a></i></div> <div class="mw-heading mw-heading3"><h3 id="Bajo_Microsoft_Windows">Bajo Microsoft Windows</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=34" title="Editar sección: Bajo Microsoft Windows"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a href="/wiki/Visual_Studio_Code" title="Visual Studio Code">Visual Studio Code</a></li> <li><a href="/wiki/Visual_Studio" class="mw-redirect" title="Visual Studio">Visual Studio</a></li> <li><a href="/wiki/C%2B%2B_Builder" class="mw-redirect" title="C++ Builder">C++ Builder</a></li> <li><a href="/wiki/Code::Blocks" title="Code::Blocks">Code::Blocks</a></li> <li><a href="/wiki/Dev-C%2B%2B" title="Dev-C++">Dev-C++</a></li> <li><a href="/wiki/Visual_C%2B%2B" class="mw-redirect" title="Visual C++">Visual C++</a></li> <li><a href="/wiki/WxDev-C%2B%2B" title="WxDev-C++">wxDev-C++</a></li> <li><a href="/w/index.php?title=Zinjai&action=edit&redlink=1" class="new" title="Zinjai (aún no redactado)">Zinjai</a></li> <li><a href="/wiki/Watcom#Open_Watcom" title="Watcom">Open Watcom (IDE y Dialog Editor)</a></li> <li><a href="/wiki/CodeLite" title="CodeLite">CodeLite</a></li></ul> <div class="mw-heading mw-heading3"><h3 id="Bajo_MacOS">Bajo MacOS</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=35" title="Editar sección: Bajo MacOS"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a href="/wiki/Xcode" title="Xcode">Xcode</a></li> <li><a href="/wiki/Visual_Studio_Code" title="Visual Studio Code">Visual Studio Code</a></li> <li><a href="/w/index.php?title=Zinjai&action=edit&redlink=1" class="new" title="Zinjai (aún no redactado)">Zinjai</a></li> <li><a href="/wiki/CodeLite" title="CodeLite">CodeLite</a></li> <li><a href="/wiki/Geany" title="Geany">Geany</a></li></ul> <div class="mw-heading mw-heading3"><h3 id="Bajo_DOS">Bajo DOS</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=36" title="Editar sección: Bajo DOS"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a href="/wiki/Turbo_C%2B%2B" class="mw-redirect" title="Turbo C++">Turbo C++</a>, evolución o salto a la POO del <a href="/wiki/Turbo_C" title="Turbo C">Turbo C</a></li></ul> <div class="mw-heading mw-heading3"><h3 id="Bajo_GNU/Linux"><span id="Bajo_GNU.2FLinux"></span>Bajo GNU/Linux</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=37" title="Editar sección: Bajo GNU/Linux"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a href="/w/index.php?title=Clion_(software)&action=edit&redlink=1" class="new" title="Clion (software) (aún no redactado)">Clion (software)</a></li> <li><a href="/wiki/Visual_Studio_Code" title="Visual Studio Code">Visual Studio Code</a></li> <li><a href="/wiki/Code::Blocks" title="Code::Blocks">Code::Blocks</a></li> <li><a href="/wiki/NetBeans" title="NetBeans">NetBeans</a></li> <li><a href="/wiki/Eclipse_(software)" title="Eclipse (software)">Eclipse</a></li> <li><a href="/wiki/Geany" title="Geany">Geany</a></li> <li><a href="/wiki/Emacs" class="mw-redirect" title="Emacs">Emacs</a></li> <li><a href="/w/index.php?title=Zinjai&action=edit&redlink=1" class="new" title="Zinjai (aún no redactado)">Zinjai</a></li> <li><a href="/w/index.php?title=Kdevelop&action=edit&redlink=1" class="new" title="Kdevelop (aún no redactado)">Kdevelop</a></li> <li><a href="/wiki/Watcom#Open_Watcom" title="Watcom">Open Watcom (IDE y Dialog Editor)</a></li> <li><a href="/wiki/CodeLite" title="CodeLite">CodeLite</a></li></ul> <div class="mw-heading mw-heading3"><h3 id="Software_Creados_y_Programados_con_C++"><span id="Software_Creados_y_Programados_con_C.2B.2B"></span>Software Creados y Programados con C++</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=38" title="Editar sección: Software Creados y Programados con C++"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a href="/wiki/Microsoft_Edge" title="Microsoft Edge">Microsoft Edge</a></li> <li><a href="/wiki/Google_Chrome" title="Google Chrome">Google Chrome</a></li> <li><a href="/wiki/%CE%9CTorrent" title="ΜTorrent">μTorrent</a></li> <li><a href="/wiki/BitTorrent_(programa)" title="BitTorrent (programa)">BitTorrent (programa)</a></li> <li><a href="/wiki/Haiku_(sistema_operativo)" title="Haiku (sistema operativo)">Haiku (sistema operativo)</a></li> <li><a href="/wiki/Windows_Phone_8.1" title="Windows Phone 8.1">Windows Phone 8.1</a></li> <li><a href="/wiki/Open_Broadcaster_Software" title="Open Broadcaster Software">Open Broadcaster Software</a></li> <li><a href="/wiki/Opera_(navegador)" title="Opera (navegador)">Opera (navegador)</a></li> <li><a href="/wiki/CATIA" title="CATIA">CATIA</a></li></ul> <div class="mw-heading mw-heading2"><h2 id="Críticas"><span id="Cr.C3.ADticas"></span>Críticas</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=39" title="Editar sección: Críticas"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>A pesar de su adopción generalizada, muchos programadores han criticado el lenguaje C++, incluyendo <a href="/wiki/Linus_Torvalds" title="Linus Torvalds">Linus Torvalds</a>,<sup id="cite_ref-torvalds_4-0" class="reference separada"><a href="#cite_note-torvalds-4"><span class="corchete-llamada">[</span>4<span class="corchete-llamada">]</span></a></sup>​ <a href="/wiki/Richard_Stallman" title="Richard Stallman">Richard Stallman</a>,<sup id="cite_ref-5" class="reference separada"><a href="#cite_note-5"><span class="corchete-llamada">[</span>5<span class="corchete-llamada">]</span></a></sup>​ y <a href="/wiki/Ken_Thompson" title="Ken Thompson">Ken Thompson</a>.<sup id="cite_ref-6" class="reference separada"><a href="#cite_note-6"><span class="corchete-llamada">[</span>6<span class="corchete-llamada">]</span></a></sup>​ Los problemas incluyen una falta de <a href="/wiki/Reflexi%C3%B3n_(inform%C3%A1tica)" title="Reflexión (informática)">reflexión</a> o <a href="/wiki/Recolector_de_basura" title="Recolector de basura">recolector de basura</a>, tiempos de compilación lentos, perceived <a href="/w/index.php?title=Feature_creep&action=edit&redlink=1" class="new" title="Feature creep (aún no redactado)">feature creep</a>,<sup id="cite_ref-7" class="reference separada"><a href="#cite_note-7"><span class="corchete-llamada">[</span>7<span class="corchete-llamada">]</span></a></sup>​ y mensajes de error detallados, particularmente de la metaprogramación de plantilla.<sup id="cite_ref-8" class="reference separada"><a href="#cite_note-8"><span class="corchete-llamada">[</span>8<span class="corchete-llamada">]</span></a></sup>​ </p><p>Para evitar los problemas que existen en C++, y para aumentar la productividad,<sup id="cite_ref-9" class="reference separada"><a href="#cite_note-9"><span class="corchete-llamada">[</span>9<span class="corchete-llamada">]</span></a></sup>​ algunas personas sugieren lenguajes alternativos más recientes que C++, como <a href="/wiki/D_(lenguaje_de_programaci%C3%B3n)" title="D (lenguaje de programación)">D</a>, <a href="/wiki/Go_(lenguaje_de_programaci%C3%B3n)" title="Go (lenguaje de programación)">Go</a>, <a href="/wiki/Rust_(lenguaje_de_programaci%C3%B3n)" title="Rust (lenguaje de programación)">Rust</a> y <a href="/wiki/Vala_(lenguaje_de_programaci%C3%B3n)" title="Vala (lenguaje de programación)">Vala</a>.<sup id="cite_ref-10" class="reference separada"><a href="#cite_note-10"><span class="corchete-llamada">[</span>10<span class="corchete-llamada">]</span></a></sup>​ </p> <div class="mw-heading mw-heading2"><h2 id="Véase_también"><span id="V.C3.A9ase_tambi.C3.A9n"></span>Véase también</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=40" title="Editar sección: Véase también"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a href="/wiki/A%2B%2B" title="A++">A++</a></li> <li><a href="/wiki/C%2B%2B/CX" title="C++/CX">C++/CX</a></li> <li><a href="/wiki/C%2B%2B11" title="C++11">C++11</a></li> <li><a href="/wiki/C%2B%2B14" title="C++14">C++14</a></li> <li><a href="/wiki/C%2B%2B17" title="C++17">C++17</a></li></ul> <div class="mw-heading mw-heading2"><h2 id="Referencias">Referencias</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=41" title="Editar sección: Referencias"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="listaref" style="list-style-type: decimal;"><ol class="references"> <li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"><span class="citation web"><a rel="nofollow" class="external text" href="https://www.iso.org/standard/79358.html">«ISO/IEC 14882:2020»</a>. Organización Internacional de Normalización<span class="reference-accessdate">. Consultado el 6 de noviembre de 2023</span>.</span><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fes.wikipedia.org%3AC%2B%2B&rft.btitle=ISO%2FIEC+14882%3A2020&rft.genre=book&rft.pub=Organizaci%C3%B3n+Internacional+de+Normalizaci%C3%B3n&rft_id=https%3A%2F%2Fwww.iso.org%2Fstandard%2F79358.html&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;"> </span></span></span> </li> <li id="cite_note-stroustruptcpppl-2"><span class="mw-cite-backlink"><a href="#cite_ref-stroustruptcpppl_2-0">↑</a></span> <span class="reference-text"><span id="CITAREFStroustrup1997" class="citation libro">Stroustrup, Bjarne (1997). <a rel="nofollow" class="external text" href="https://archive.org/details/cprogramminglang00stro_0">«1»</a>. <i>The C++ Programming Language</i> (Third edición). <small><a href="/wiki/ISBN" title="ISBN">ISBN</a> <a href="/wiki/Especial:FuentesDeLibros/0201889544" title="Especial:FuentesDeLibros/0201889544">0201889544</a></small>. <small><a href="/wiki/OCLC" title="OCLC">OCLC</a> <a rel="nofollow" class="external text" href="//www.worldcat.org/oclc/59193992">59193992</a></small><span class="reference-accessdate">. Consultado el 25 de febrero de 2010</span>.</span><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fes.wikipedia.org%3AC%2B%2B&rft.atitle=The+C%2B%2B+Programming+Language&rft.au=Stroustrup%2C+Bjarne&rft.aufirst=Bjarne&rft.aulast=Stroustrup&rft.btitle=1&rft.date=1997&rft.edition=Third&rft.genre=bookitem&rft.isbn=0201889544&rft_id=https%3A%2F%2Farchive.org%2Fdetails%2Fcprogramminglang00stro_0&rft_id=info%3Aoclcnum%2F59193992&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;"> </span></span></span> </li> <li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external free" href="http://herbsutter.com/2011/08/12/we-have-an-international-standard-c0x-is-unanimously-approved/">http://herbsutter.com/2011/08/12/we-have-an-international-standard-c0x-is-unanimously-approved/</a></span> </li> <li id="cite_note-torvalds-4"><span class="mw-cite-backlink"><a href="#cite_ref-torvalds_4-0">↑</a></span> <span class="reference-text"><span class="citation cita-web">«<a rel="nofollow" class="external text" href="https://lwn.net/Articles/249460/">Re: [RFC</a> Convert builin-mailinfo.c to use The Better String Library]», 6 de septiembre de 2007<span class="printonly">, <a rel="nofollow" class="external free" href="https://lwn.net/Articles/249460/">https://lwn.net/Articles/249460/</a></span><span class="reference-accessdate">, consultado el 31 de marzo de 2015</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.btitle=Re%3A+%5BRFC%5D+Convert+builin-mailinfo.c+to+use+The+Better+String+Library&rft.atitle=&rft.date=6+de+septiembre+de+2007&rft_id=https%3A%2F%2Flwn.net%2FArticles%2F249460%2F&rfr_id=info:sid/es.wikipedia.org:C%2B%2B"><span style="display: none;"> </span></span></span> </li> <li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a></span> <span class="reference-text"><span class="citation cita-web">«<a rel="nofollow" class="external text" href="http://harmful.cat-v.org/software/c++/rms">Re: Efforts to attract more users?</a>», 12 de julio de 2010<span class="printonly">, <a rel="nofollow" class="external free" href="http://harmful.cat-v.org/software/c++/rms">http://harmful.cat-v.org/software/c++/rms</a></span><span class="reference-accessdate">, consultado el 31 de marzo de 2015</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.btitle=Re%3A+Efforts+to+attract+more+users%3F&rft.atitle=&rft.date=12+de+julio+de+2010&rft_id=http%3A%2F%2Fharmful.cat-v.org%2Fsoftware%2Fc%2B%2B%2Frms&rfr_id=info:sid/es.wikipedia.org:C%2B%2B"><span style="display: none;"> </span></span></span> </li> <li id="cite_note-6"><span class="mw-cite-backlink"><a href="#cite_ref-6">↑</a></span> <span class="reference-text"><span id="CITAREFAndrew_Binstock18_de_mayo_de_2011" class="citation web">Andrew Binstock (18 de mayo de 2011). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20140313072938/http://www.drdobbs.com/open-source/interview-with-ken-thompson/229502480">«Dr. Dobb's: Interview with Ken Thompson»</a>. Archivado desde <a rel="nofollow" class="external text" href="http://www.drdobbs.com/open-source/interview-with-ken-thompson/229502480">el original</a> el 13 de marzo de 2014<span class="reference-accessdate">. Consultado el 7 de febrero de 2014</span>.</span><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fes.wikipedia.org%3AC%2B%2B&rft.au=Andrew+Binstock&rft.aulast=Andrew+Binstock&rft.btitle=Dr.+Dobb%27s%3A+Interview+with+Ken+Thompson&rft.date=18+de+mayo+de+2011&rft.genre=book&rft_id=http%3A%2F%2Fwww.drdobbs.com%2Fopen-source%2Finterview-with-ken-thompson%2F229502480&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;"> </span></span></span> </li> <li id="cite_note-7"><span class="mw-cite-backlink"><a href="#cite_ref-7">↑</a></span> <span class="reference-text"><span id="CITAREFPike2012" class="citation web">Pike, Rob (2012). <a rel="nofollow" class="external text" href="http://commandcenter.blogspot.mx/2012/06/less-is-exponentially-more.html">«Less is exponentially more»</a>.</span><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fes.wikipedia.org%3AC%2B%2B&rft.au=Pike%2C+Rob&rft.aufirst=Rob&rft.aulast=Pike&rft.btitle=Less+is+exponentially+more&rft.date=2012&rft.genre=book&rft_id=http%3A%2F%2Fcommandcenter.blogspot.mx%2F2012%2F06%2Fless-is-exponentially-more.html&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;"> </span></span></span> </li> <li id="cite_note-8"><span class="mw-cite-backlink"><a href="#cite_ref-8">↑</a></span> <span class="reference-text"><span id="CITAREFKreinin13_de_octubre_de_2009" class="citation web">Kreinin, Yossi (13 de octubre de 2009). <a rel="nofollow" class="external text" href="http://yosefk.com/c++fqa/defective.html">«Defective C++»</a><span class="reference-accessdate">. Consultado el 3 de febrero de 2016</span>.</span><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fes.wikipedia.org%3AC%2B%2B&rft.au=Kreinin%2C+Yossi&rft.aufirst=Yossi&rft.aulast=Kreinin&rft.btitle=Defective+C%2B%2B&rft.date=13+de+octubre+de+2009&rft.genre=book&rft_id=http%3A%2F%2Fyosefk.com%2Fc%2B%2Bfqa%2Fdefective.html&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;"> </span></span></span> </li> <li id="cite_note-9"><span class="mw-cite-backlink"><a href="#cite_ref-9">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.technologyreview.com/s/419956/new-languages-and-why-we-need-them/">New Languages, and Why We Need Them</a>, <a href="/wiki/MIT_Technology_Review" title="MIT Technology Review">MIT Technology Review</a></span> </li> <li id="cite_note-10"><span class="mw-cite-backlink"><a href="#cite_ref-10">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.drdobbs.com/architecture-and-design/the-new-native-languages/232901652">The New Native Languages | Dr Dobb's</a></span> </li> </ol></div> <div class="mw-heading mw-heading3"><h3 id="Bibliografía"><span id="Bibliograf.C3.ADa"></span>Bibliografía</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=42" title="Editar sección: Bibliografía"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a href="/wiki/Bjarne_Stroustrup" title="Bjarne Stroustrup">Bjarne Stroustrup</a>, <i>El lenguaje de programación C++</i>, <a href="/wiki/Addison_Wesley" class="mw-redirect" title="Addison Wesley">Addison Wesley</a>, Madrid, 1998, <a href="/wiki/Especial:FuentesDeLibros/8478290192" class="internal mw-magiclink-isbn">ISBN 84-7829-019-2</a></li> <li>Bjarne Stroustrup, <i>The C++ Programming Language</i>, Addison-Wesley Pub Co; Tercera edición (15 de febrero de 2000); <a href="/wiki/Especial:FuentesDeLibros/0201700735" class="internal mw-magiclink-isbn">ISBN 0-201-70073-5</a></li> <li>Bjarne Stroustrup, <i>The Design and Evolution of C++</i>, Addison-Wesley Pub Cp; Primera edición (29 de marzo de 1994); <a href="/wiki/Especial:FuentesDeLibros/0201543303" class="internal mw-magiclink-isbn">ISBN 0-201-54330-3</a></li> <li>Margaret A. Ellis y Bjarne Stroustrup, <i>The Annotated C++ Reference Manual</i>, Addison-Wesley Pub Co; (1 de enero de 1990); <a href="/wiki/Especial:FuentesDeLibros/0201514591" class="internal mw-magiclink-isbn">ISBN 0-201-51459-1</a></li></ul> <div class="mw-heading mw-heading2"><h2 id="Enlaces_externos">Enlaces externos</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=C%2B%2B&action=edit&section=43" title="Editar sección: Enlaces externos"><span>editar</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><span typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/15px-Commons-logo.svg.png" decoding="async" width="15" height="20" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/23px-Commons-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/30px-Commons-logo.svg.png 2x" data-file-width="1024" data-file-height="1376" /></span></span> <a href="/wiki/Wikimedia_Commons" title="Wikimedia Commons">Wikimedia Commons</a> alberga una categoría multimedia sobre <b><a href="https://commons.wikimedia.org/wiki/Category:C%2B%2B" class="extiw" title="commons:Category:C++">C++</a></b>.</li></ul> <ul><li><span class="citation web"><a rel="nofollow" class="external text" href="http://cppreference.com">«Cplusplus resources»</a> <span style="color:var(--color-subtle, #555 );">(en inglés)</span><span class="reference-accessdate">. Consultado el 10 de abril de 2015</span>.</span><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fes.wikipedia.org%3AC%2B%2B&rft.btitle=Cplusplus+resources&rft.genre=book&rft_id=http%3A%2F%2Fcppreference.com&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;"> </span></span></li> <li><span class="citation web"><a rel="nofollow" class="external text" href="http://cprogramming.com">«C/C++ Reference=C Programming and C++ Programming»</a> <span style="color:var(--color-subtle, #555 );">(en inglés)</span><span class="reference-accessdate">. Consultado el 10 de abril de 2015</span>.</span><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fes.wikipedia.org%3AC%2B%2B&rft.btitle=C%2FC%2B%2B+Reference%3DC+Programming+and+C%2B%2B+Programming&rft.genre=book&rft_id=http%3A%2F%2Fcprogramming.com&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;"> </span></span></li> <li><span class="citation web"><a rel="nofollow" class="external text" href="https://tecnomate.xyz/curso-de-programacion-cpp/">«TecnoMate.xyz=Curso de Programación C++»</a><span class="reference-accessdate">. Consultado el 1 de septiembre de 2019</span>.</span><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fes.wikipedia.org%3AC%2B%2B&rft.btitle=TecnoMate.xyz%3DCurso+de+Programaci%C3%B3n+C%2B%2B&rft.genre=book&rft_id=https%3A%2F%2Ftecnomate.xyz%2Fcurso-de-programacion-cpp%2F&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;"> </span></span></li></ul> <style data-mw-deduplicate="TemplateStyles:r161257576">.mw-parser-output .mw-authority-control{margin-top:1.5em}.mw-parser-output .mw-authority-control .navbox table{margin:0}.mw-parser-output .mw-authority-control .navbox hr:last-child{display:none}.mw-parser-output .mw-authority-control .navbox+.mw-mf-linked-projects{display:none}.mw-parser-output .mw-authority-control .mw-mf-linked-projects{display:flex;padding:0.5em;border:1px solid var(--border-color-base,#a2a9b1);background-color:var(--background-color-neutral,#eaecf0);color:var(--color-base,#202122)}.mw-parser-output .mw-authority-control .mw-mf-linked-projects ul li{margin-bottom:0}.mw-parser-output .mw-authority-control .navbox{border:1px solid var(--border-color-base,#a2a9b1);background-color:var(--background-color-neutral-subtle,#f8f9fa)}.mw-parser-output .mw-authority-control .navbox-list{border-color:#f8f9fa}.mw-parser-output .mw-authority-control .navbox th{background-color:#eeeeff}html.skin-theme-clientpref-night .mw-parser-output .mw-authority-control .mw-mf-linked-projects{border:1px solid var(--border-color-base,#72777d);background-color:var(--background-color-neutral,#27292d);color:var(--color-base,#eaecf0)}html.skin-theme-clientpref-night .mw-parser-output .mw-authority-control .navbox{border:1px solid var(--border-color-base,#72777d)!important;background-color:var(--background-color-neutral-subtle,#202122)!important}html.skin-theme-clientpref-night .mw-parser-output .mw-authority-control .navbox-list{border-color:#202122!important}html.skin-theme-clientpref-night .mw-parser-output .mw-authority-control .navbox th{background-color:#27292d!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .mw-authority-control .mw-mf-linked-projects{border:1px solid var(--border-color-base,#72777d)!important;background-color:var(--background-color-neutral,#27292d)!important;color:var(--color-base,#eaecf0)!important}html.skin-theme-clientpref-os .mw-parser-output .mw-authority-control .navbox{border:1px solid var(--border-color-base,#72777d)!important;background-color:var(--background-color-neutral-subtle,#202122)!important}html.skin-theme-clientpref-os .mw-parser-output .mw-authority-control .navbox-list{border-color:#202122!important}html.skin-theme-clientpref-os .mw-parser-output .mw-authority-control .navbox th{background-color:#27292d!important}}</style><div class="mw-authority-control"><div role="navigation" class="navbox" aria-label="Navbox" style="width: inherit;padding:3px"><table class="hlist navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="row" class="navbox-group" style="width: 12%; text-align:center;"><a href="/wiki/Control_de_autoridades" title="Control de autoridades">Control de autoridades</a></th><td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px"><div style="padding:0em 0.25em"> <ul><li><b>Proyectos Wikimedia</b></li> <li><span style="white-space:nowrap;"><span typeof="mw:File"><a href="/wiki/Wikidata" title="Wikidata"><img alt="Wd" src="//upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Wikidata-logo.svg/20px-Wikidata-logo.svg.png" decoding="async" width="20" height="11" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Wikidata-logo.svg/30px-Wikidata-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Wikidata-logo.svg/40px-Wikidata-logo.svg.png 2x" data-file-width="1050" data-file-height="590" /></a></span> Datos:</span> <span class="uid"><a href="https://www.wikidata.org/wiki/Q2407" class="extiw" title="wikidata:Q2407">Q2407</a></span></li> <li><span style="white-space:nowrap;"><span typeof="mw:File"><a href="/wiki/Wikimedia_Commons" title="Commonscat"><img alt="Commonscat" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/15px-Commons-logo.svg.png" decoding="async" width="15" height="20" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/23px-Commons-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/30px-Commons-logo.svg.png 2x" data-file-width="1024" data-file-height="1376" /></a></span> Multimedia:</span> <span class="uid"><span class="plainlinks"><a class="external text" href="https://commons.wikimedia.org/wiki/Category:C++">C++</a></span> / <span class="plainlinks"><a class="external text" href="https://commons.wikimedia.org/wiki/Special:MediaSearch?type=image&search=%22Q2407%22">Q2407</a></span></span></li> <li><span style="white-space:nowrap;"><span typeof="mw:File"><a href="/wiki/Wikilibros" title="Wikibooks"><img alt="Wikibooks" src="//upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikibooks-logo.svg/15px-Wikibooks-logo.svg.png" decoding="async" width="15" height="15" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikibooks-logo.svg/23px-Wikibooks-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikibooks-logo.svg/30px-Wikibooks-logo.svg.png 2x" data-file-width="300" data-file-height="300" /></a></span> Libros y manuales:</span> <span class="uid"><a href="https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C%2B%2B" class="extiw" title="b:Programación en C++">Programación en C++</a></span></li></ul> <hr /> <ul><li><b>Identificadores</b></li> <li><span style="white-space:nowrap;"><a href="/wiki/Biblioteca_Nacional_de_Espa%C3%B1a" title="Biblioteca Nacional de España">BNE</a>:</span> <span class="uid"><a rel="nofollow" class="external text" href="https://datos.bne.es/resource/XX540250">XX540250</a></span></li> <li><span style="white-space:nowrap;"><a href="/wiki/Biblioteca_Nacional_de_Francia" title="Biblioteca Nacional de Francia">BNF</a>:</span> <span class="uid"><a rel="nofollow" class="external text" href="https://catalogue.bnf.fr/ark:/12148/cb12139768z">12139768z</a> <a rel="nofollow" class="external text" href="http://data.bnf.fr/ark:/12148/cb12139768z">(data)</a></span></li> <li><span style="white-space:nowrap;"><a href="/wiki/Gemeinsame_Normdatei" title="Gemeinsame Normdatei">GND</a>:</span> <span class="uid"><a rel="nofollow" class="external text" href="https://d-nb.info/gnd/4193909-8">4193909-8</a></span></li> <li><span style="white-space:nowrap;"><a href="/wiki/Library_of_Congress_Control_Number" title="Library of Congress Control Number">LCCN</a>:</span> <span class="uid"><a rel="nofollow" class="external text" href="https://id.loc.gov/authorities/sh87007505">sh87007505</a></span></li> <li><span style="white-space:nowrap;"><a href="/wiki/Biblioteca_Nacional_de_la_Rep%C3%BAblica_Checa" title="Biblioteca Nacional de la República Checa">NKC</a>:</span> <span class="uid"><a rel="nofollow" class="external text" href="https://aleph.nkp.cz/F/?func=find-c&local_base=aut&ccl_term=ica=ph116956">ph116956</a></span></li> <li><span style="white-space:nowrap;"><a href="/wiki/Biblioteca_Nacional_de_Israel" title="Biblioteca Nacional de Israel">NLI</a>:</span> <span class="uid"><a rel="nofollow" class="external text" href="http://olduli.nli.org.il/F/?func=find-b&local_base=NLX10&find_code=UID&request=987007539277905171">987007539277905171</a></span></li> <li><span style="white-space:nowrap;"><a href="/wiki/Syst%C3%A8me_universitaire_de_documentation" title="Système universitaire de documentation">SUDOC</a>:</span> <span class="uid"><a rel="nofollow" class="external text" href="https://www.idref.fr/029859778">029859778</a></span></li> <li><b>Diccionarios y enciclopedias</b></li> <li><span style="white-space:nowrap;"><a href="/wiki/Enciclopedia_Brit%C3%A1nica" title="Enciclopedia Británica">Britannica</a>:</span> <span class="uid"><a rel="nofollow" class="external text" href="https://www.britannica.com/technology/C-computer-language">url</a></span></li></ul> </div></td></tr></tbody></table></div><div class="mw-mf-linked-projects hlist"> <ul><li><span style="white-space:nowrap;"><span typeof="mw:File"><a href="/wiki/Wikidata" title="Wikidata"><img alt="Wd" src="//upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Wikidata-logo.svg/20px-Wikidata-logo.svg.png" decoding="async" width="20" height="11" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Wikidata-logo.svg/30px-Wikidata-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Wikidata-logo.svg/40px-Wikidata-logo.svg.png 2x" data-file-width="1050" data-file-height="590" /></a></span> Datos:</span> <span class="uid"><a href="https://www.wikidata.org/wiki/Q2407" class="extiw" title="wikidata:Q2407">Q2407</a></span></li> <li><span style="white-space:nowrap;"><span typeof="mw:File"><a href="/wiki/Wikimedia_Commons" title="Commonscat"><img alt="Commonscat" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/15px-Commons-logo.svg.png" decoding="async" width="15" height="20" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/23px-Commons-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/30px-Commons-logo.svg.png 2x" data-file-width="1024" data-file-height="1376" /></a></span> Multimedia:</span> <span class="uid"><span class="plainlinks"><a class="external text" href="https://commons.wikimedia.org/wiki/Category:C++">C++</a></span> / <span class="plainlinks"><a class="external text" href="https://commons.wikimedia.org/wiki/Special:MediaSearch?type=image&search=%22Q2407%22">Q2407</a></span></span></li> <li><span style="white-space:nowrap;"><span typeof="mw:File"><a href="/wiki/Wikilibros" title="Wikibooks"><img alt="Wikibooks" src="//upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikibooks-logo.svg/15px-Wikibooks-logo.svg.png" decoding="async" width="15" height="15" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikibooks-logo.svg/23px-Wikibooks-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikibooks-logo.svg/30px-Wikibooks-logo.svg.png 2x" data-file-width="300" data-file-height="300" /></a></span> Libros y manuales:</span> <span class="uid"><a href="https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C%2B%2B" class="extiw" title="b:Programación en C++">Programación en C++</a></span></li></ul> </div></div> <!-- NewPP limit report Parsed by mw‐web.eqiad.main‐864bbfd546‐7ss59 Cached time: 20241129183210 Cache expiry: 2592000 Reduced expiry: false Complications: [show‐toc] CPU time usage: 0.453 seconds Real time usage: 2.175 seconds Preprocessor visited node count: 4457/1000000 Post‐expand include size: 38311/2097152 bytes Template argument size: 4786/2097152 bytes Highest expansion depth: 25/100 Expensive parser function count: 40/500 Unstrip recursion depth: 0/20 Unstrip post‐expand size: 66616/5000000 bytes Lua time usage: 0.220/10.000 seconds Lua memory usage: 5609892/52428800 bytes Number of Wikibase entities loaded: 10/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 1761.992 1 -total 14.92% 262.911 1 Plantilla:Control_de_autoridades 6.40% 112.680 1 Plantilla:Ficha_de_lenguaje_de_programación 6.26% 110.216 1 Plantilla:Ficha 3.98% 70.047 1 Plantilla:Listaref 3.82% 67.316 16 Plantilla:Propiedad 1.73% 30.408 4 Plantilla:Cita_web 1.32% 23.267 2 Plantilla:Cite_mailing_list 0.93% 16.468 2 Plantilla:Obra_citada/núcleo 0.74% 12.974 2 Plantilla:Y-e --> <!-- Saved in parser cache with key eswiki:pcache:618:|#|:idhash:canonical and timestamp 20241129183210 and revision id 163494424. Rendering was triggered because: page-view --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1&useformat=desktop" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Obtenido de «<a dir="ltr" href="https://es.wikipedia.org/w/index.php?title=C%2B%2B&oldid=163494424">https://es.wikipedia.org/w/index.php?title=C%2B%2B&oldid=163494424</a>»</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Especial:Categor%C3%ADas" title="Especial:Categorías">Categoría</a>: <ul><li><a href="/wiki/Categor%C3%ADa:C%2B%2B" title="Categoría:C++">C++</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Categorías ocultas: <ul><li><a href="/wiki/Categor%C3%ADa:Wikipedia:Art%C3%ADculos_con_identificadores_BNE" title="Categoría:Wikipedia:Artículos con identificadores BNE">Wikipedia:Artículos con identificadores BNE</a></li><li><a href="/wiki/Categor%C3%ADa:Wikipedia:Art%C3%ADculos_con_identificadores_BNF" title="Categoría:Wikipedia:Artículos con identificadores BNF">Wikipedia:Artículos con identificadores BNF</a></li><li><a href="/wiki/Categor%C3%ADa:Wikipedia:Art%C3%ADculos_con_identificadores_GND" title="Categoría:Wikipedia:Artículos con identificadores GND">Wikipedia:Artículos con identificadores GND</a></li><li><a href="/wiki/Categor%C3%ADa:Wikipedia:Art%C3%ADculos_con_identificadores_LCCN" title="Categoría:Wikipedia:Artículos con identificadores LCCN">Wikipedia:Artículos con identificadores LCCN</a></li><li><a href="/wiki/Categor%C3%ADa:Wikipedia:P%C3%A1ginas_con_enlaces_m%C3%A1gicos_de_ISBN" title="Categoría:Wikipedia:Páginas con enlaces mágicos de ISBN">Wikipedia:Páginas con enlaces mágicos de ISBN</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> Esta página se editó por última vez el 9 nov 2024 a las 22:37.</li> <li id="footer-info-copyright">El texto está disponible bajo la <a href="/wiki/Wikipedia:Texto_de_la_Licencia_Creative_Commons_Atribuci%C3%B3n-CompartirIgual_4.0_Internacional" title="Wikipedia:Texto de la Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional">Licencia Creative Commons Atribución-CompartirIgual 4.0</a>; pueden aplicarse cláusulas adicionales. Al usar este sitio aceptas nuestros <a class="external text" href="https://foundation.wikimedia.org/wiki/Policy:Terms_of_Use/es">términos de uso</a> y nuestra <a class="external text" href="https://foundation.wikimedia.org/wiki/Policy:Privacy_policy/es">política de privacidad</a>.<br />Wikipedia® es una marca registrada de la <a rel="nofollow" class="external text" href="https://wikimediafoundation.org/es/">Fundación Wikimedia</a>, una organización sin ánimo de lucro.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy/es">Política de privacidad</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:Acerca_de">Acerca de Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:Limitaci%C3%B3n_general_de_responsabilidad">Limitación de responsabilidad</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Código de conducta</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Desarrolladores</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/es.wikipedia.org">Estadísticas</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement/es">Declaración de cookies</a></li> <li id="footer-places-mobileview"><a href="//es.m.wikipedia.org/w/index.php?title=C%2B%2B&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Versión para móviles</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-5c59558b9d-hjd8q","wgBackendResponseTime":208,"wgPageParseReport":{"limitreport":{"cputime":"0.453","walltime":"2.175","ppvisitednodes":{"value":4457,"limit":1000000},"postexpandincludesize":{"value":38311,"limit":2097152},"templateargumentsize":{"value":4786,"limit":2097152},"expansiondepth":{"value":25,"limit":100},"expensivefunctioncount":{"value":40,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":66616,"limit":5000000},"entityaccesscount":{"value":10,"limit":400},"timingprofile":["100.00% 1761.992 1 -total"," 14.92% 262.911 1 Plantilla:Control_de_autoridades"," 6.40% 112.680 1 Plantilla:Ficha_de_lenguaje_de_programación"," 6.26% 110.216 1 Plantilla:Ficha"," 3.98% 70.047 1 Plantilla:Listaref"," 3.82% 67.316 16 Plantilla:Propiedad"," 1.73% 30.408 4 Plantilla:Cita_web"," 1.32% 23.267 2 Plantilla:Cite_mailing_list"," 0.93% 16.468 2 Plantilla:Obra_citada/núcleo"," 0.74% 12.974 2 Plantilla:Y-e"]},"scribunto":{"limitreport-timeusage":{"value":"0.220","limit":"10.000"},"limitreport-memusage":{"value":5609892,"limit":52428800}},"cachereport":{"origin":"mw-web.eqiad.main-864bbfd546-7ss59","timestamp":"20241129183210","ttl":2592000,"transientcontent":false}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"C++","url":"https:\/\/es.wikipedia.org\/wiki\/C%2B%2B","sameAs":"http:\/\/www.wikidata.org\/entity\/Q2407","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q2407","author":{"@type":"Organization","name":"Colaboradores de los proyectos Wikimedia"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2002-02-07T01:44:59Z","dateModified":"2024-11-09T22:37:35Z","image":"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/1\/18\/ISO_C%2B%2B_Logo.svg","headline":"lenguaje de programaci\u00f3n de prop\u00f3sito general"}</script> </body> </html>