0% acharam este documento útil (0 voto)
69 visualizações18 páginas

C

1) C++ é uma linguagem de programação multi-paradigma desenvolvida por Bjarne Stroustrup nos anos 1980 como uma extensão orientada a objetos da linguagem C. 2) Novos recursos como classes, herança, sobrecarga de operadores e exceções foram adicionados ao longo do tempo. 3) A linguagem foi padronizada pela ISO em 1998 e continua evoluindo com novas versões para adicionar funcionalidades.

Enviado por

Rafael Araujo
Direitos autorais
© © All Rights Reserved
Formatos disponíveis
Baixe no formato PDF, TXT ou leia online no Scribd
Fazer download em pdf ou txt
0% acharam este documento útil (0 voto)
69 visualizações18 páginas

C

1) C++ é uma linguagem de programação multi-paradigma desenvolvida por Bjarne Stroustrup nos anos 1980 como uma extensão orientada a objetos da linguagem C. 2) Novos recursos como classes, herança, sobrecarga de operadores e exceções foram adicionados ao longo do tempo. 3) A linguagem foi padronizada pela ISO em 1998 e continua evoluindo com novas versões para adicionar funcionalidades.

Enviado por

Rafael Araujo
Direitos autorais
© © All Rights Reserved
Formatos disponíveis
Baixe no formato PDF, TXT ou leia online no Scribd
Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1/ 18

C++

Origem: Wikipdia, a enciclopdia livre.

C++ (em portugus: l-se "c mais mais", em ingls l-se see
plus plus) uma linguagem de programao compilada multi- C++
paradigma (seu suporte inclui linguagem imperativa, orientada a
objetos e genrica) e de uso geral. A linguagem considerada de
mdio nvel, pois combina caractersticas de linguagens de alto e
baixo nveis. Desde os anos 1990 uma das linguagens
comerciais mais populares, sendo bastante usada tambm na
academia por seu grande desempenho e base de utilizadores.

Bjarne Stroustrup desenvolveu o C++ (originalmente com o


Programa Ol Mundo , escrito em C++
nome C with Classes,[1] que significa C com classes em
portugus) em 1983 no Bell Labs como um adicional Paradigma Abstrao de dados,
Orientao a objeto,
linguagem C. Novas caractersticas foram adicionadas com o Programao genrica,
tempo, como funes virtuais, sobrecarga de operadores, herana Programao procedural
mltipla, gabaritos e tratamento de excees. Aps a Surgido em 1979 (padronizado em 1998)
padronizao ISO realizada em 1998 e a posterior reviso
ltima verso ISO/IEC 14882:2014 (15 de
realizada em 2003, uma nova verso da especificao da dezembro de 2014)
linguagem foi lanada em dezembro de 2014, conhecida
Criado por Bjarne Stroustrup
informalmente como C++14[2][3][4]
Estilo de Esttica, fraca ou forte, segura
tipagem:
Compiladores G++, MinGW, Microsoft
ndice Visual C++, Clang
Dialetos: ISO/IEC 14882:1998
1 Histria ISO/IEC 14882:2003
ISO/IEC 14882:2011
1.1 A evoluo da linguagem
1.2 Etimologia Influenciada Ada 83, ALGOL 68, C, CLU,
1.3 Trabalhos futuros por ML, Simula
2 Caractersticas Influenciou Ada 95, C, D, Java, PHP,
2.1 Histria descritiva Squirrel
2.2 Biblioteca padro
2.3 Operadores
2.4 Pr-processador
2.5 Gabaritos
2.6 Objetos
2.6.1 Encapsulamento
2.6.2 Herana
2.7 Polimorfismo
2.7.1 Esttico
2.7.2 Dinmico
2.7.3 Regra dos trs
2.8 Tratamento de excees
2.9 Espao de nomes
2.10 Ponteiros e referncias
2.11 Incompatibilidade com C
2.12 Anlise sinttica do cdigo fonte
3 Exemplos de cdigo
4 Crticas
5 Comunidade de desenvolvimento
5.1 Pessoas notveis
5.2 Biblioteca Boost
6 Ferramentas
6.1 Ambientes de desenvolvimento
6.2 Aplicativos desenvolvidos em C++
7 Ver tambm
8 Notas
9 Referncias
10 Bibliografia
11 Ligaes externas

Histria
A evoluo da linguagem

O C++ foi inicialmente desenvolvido por Bjarne Stroustrup dos Bell Labs, durante a dcada de 1980 com o
objetivo implementar uma verso distribuda do ncleo Unix.[1] Como o Unix era escrito em C, dever-se-ia
manter a compatibilidade, ainda que adicionando novos recursos. Alguns dos desafios incluam simular a
infraestrutura da comunicao entre processos num sistema distribudo ou de memria compartilhada e
escrever drivers para tal sistema. Stroustrup percebeu que a linguagem Simula 67 possua caractersticas
bastante teis para o desenvolvimento de software, mas que era muito lenta para uso prtico. Por outro lado, a
linguagem BCPL era rpida, mas possua demasiado baixo nvel, dificultando sua utilizao no
desenvolvimento de aplicaes. A partir de sua experincia de doutorado, comeou a acrescentar elementos do
Simula 67 no C, especialmente os recursos de criao e manipulao de objetos. O C foi escolhido como base
de desenvolvimento da nova linguagem pois possua uma proposta de uso genrico, era rpido e tambm
portvel para diversas plataformas. Algumas outras linguagens que tambm serviram de inspirao para o
cientista da computao foram ALGOL 68, Ada, CLU e ML.

Ainda em 1983 o nome da linguagem foi alterado de C with Classes para C++.
Antes implementada usando um pr-processador, a linguagem passou a exigir um
compilador prprio, escrito pelo prprio Stroustrup.[1] Novas caractersticas foram
adicionadas, como funes virtuais,[1] sobrecarga de operadores e funes,[1]
referncias, constantes, gerenciamento manual de memria, melhorias na
verificao de tipo de dado e estilo de comentrio de cdigo de uma linha (//). Em
1985 foi lanada a primeira edio do livro The C++ Programming Language,
contendo referncias para a utilizao da linguagem, j que ainda no era uma
norma oficial. A primeira verso comercial foi lanada em outubro do mesmo
ano.[5] Em 1989 a segunda verso foi lanada, contendo novas caractersticas como
herana mltipla, classes abstratas, mtodos estticos, mtodos constantes e
membros protegidos, incrementando o suporte a orientao a objeto. Em 1990 foi
lanado o livro The Annotated C++ Reference Manual, que tornou-se base para o
futuro padro. Outras adies na linguagem incluem gabaritos, tratamento de
excees, espao de nomes, converso segura de tipo de dado e o tipo booleano.
Bjarne Stroustrup em
Assim como a linguagem, sua biblioteca padro tambm sofreu melhorias ao longo 2007
do tempo. Sua primeira adio foi a biblioteca de E/S, e posteriormente a Standard
Template Library (STL); ambas tornaram-se algumas das principais funcionalidades que distanciaram a
linguagem em relao a C. Criada primordialmente na HP por Alexander Stepanov[6] no incio da dcada de
1990 para explorar os potenciais da programao genrica, a STL foi apresentada a um comit unificado ANSI
e ISO em 1993 convite de Andrew Koenig. Aps uma proposta formal na reunio do ano seguinte, a
biblioteca recebe o aval do comit.
Depois de anos de trabalho, o mesmo comit ANSI/ISO padronizou o C++ em 1998 (ISO/IEC 14882:1998).
Aps alguns anos foram reportados defeitos e imprecises no documento, e uma correo foi lanada em
2003.[7]

Por muito tempo, o C++ foi encarado como um superconjunto do C.[nota 1] Entretanto, em 1999 o novo padro
ISO para a linguagem C tornou as duas linguagens ainda mais diferentes entre si. Devido a essas
incompatibilidades, muitas empresas que desenvolvem compiladores no oferecem suporte verso mais
recente da linguagem C.

Pode-se dizer que C++ foi a nica linguagem entre tantas outras que obteve sucesso como uma sucessora
linguagem C, inclusive servindo de inspirao para outras linguagens como Java, a IDL de CORBA e C.

Etimologia

Durante sua fase inicial de desenvolvimento, a linguagem era chamada "novo C", "C84" ou ainda "C com
classes".[1] O termo "C++" creditado a Rick Mascitti,[8] e foi utilizado pela primeira vez em dezembro de
1983. O termo uma referncia ao operador de incremento ++, significando um acrscimo (uma evoluo)
linguagem C. Em tom humorado, desenvolvedores de software e especialistas em informtica no incio da
dcada de 1990 costumavam relacionar o ++ do nome grande insistncia dos programadores em utilizar o
C++ da mesma forma que a linguagem C, no usufruindo das novas facilidades que a linguagem poderia
fornecer. Assim como o ++ estava sendo aplicado de maneira ps-fixa letra C, a linguagem C++ era uma
evoluo do C ps-fixada, que s tornar-se-ia realidade em algum futuro remoto, no naquele momento.

Trabalhos futuros

A linguagem continua evoluindo de forma a fornecer novas funcionalidades. O grupo de desenvolvimento


Boost.org trabalha para evoluir a biblioteca padro, informando o comit oficial da linguagem das facilidades
que possuem maior retorno positivo dos programadores, seja por qualidade ou por utilidade, e quais ainda
devem ser desenvolvidas. Tudo indica que o C++ continuar com sua natureza multiparadigma. Por exemplo, o
trabalho da Boost.org dedica-se a acrescentar as qualidades da programao funcional e genrica. O padro
C++ no define a implementao para a definio de nomes e tratamento de excees, entre outras facilidades
especficas, o que frequentemente torna incompatveis cdigos objeto produzidos por diferentes compiladores.
Apesar disso, existem padres perifricos especficos para certas plataformas ou sistemas operacionais para
padronizar compiladores dessas plataformas, como por exemplo o C++ ABI.[nota 2]

As empresas de desenvolvimento de compiladores ainda se esforam para suportar inteiramente o padro,


especialmente na rea de gabaritos. Uma das disputas se refere palavra reservada export, que permite que a
definio de um gabarito seja separada de sua declarao. O primeiro compilador a implementar export foi o
Comeau C++ em 2003 (cinco anos aps o lanamento do padro), e no ano seguinte uma verso beta do
Borland C++ Builder X tambm suportava a facilidade. Interessante notar que ambos os compiladores so
baseados na verso EDG do C++. Muitos livros fornecem exemplos de cdigos para implementar export[nota 3]
que no so compilveis, mas no h referncias para o problema mencionado. Outros compiladores como o
Microsoft Visual C++ e o GCC no suportam a facilidade. O secretrio do comit oficial do C++ Herb Sutter
recomendou que a palavra fosse removida de verses futuras do padro da linguagem,[9] mas aps discusso a
deciso final foi mant-la.[10]

Outras disputas relativas a gabaritos se referem especializao parcial, que foi pouco suportada por muitos
anos depois que o C++ padro foi lanado.

Atualmente a linguagem tem uma nova especificao, conhecida por C++11 e publicada como 14882:2011.[11]

Caractersticas
Histria descritiva

No livro In The Design and Evolution of C++ (1994), Bjarne Stroustrup descreve algumas regras que ele
utiliza para desenvolver a linguagem, como exemplificado abaixo:

C++ desenvolvido para ser uma linguagem tipada estaticamente e de propsito geral que to eficiente
e porttil quanto o C.
C++ desenvolvido para suportar mltiplos paradigmas.
C++ desenvolvido para fornecer ao programador escolhas, mesmo que seja possvel ao programador
escolher a opo errada.
C++ desenvolvido para ser o mais compatvel com C possvel, fornecendo transies simples para
cdigo C.
C++ evita fornecer facilidades que so especficas a certas plataformas ou a certos grupos de
desenvolvedores.
C++ no exige overhead para facilidades que no so utilizadas.
C++ desenvolvido para ser utilizado mesmo sem um ambiente de desenvolvimento sofisticado.

Stanley B. Lippman documenta em seu livro Inside the C++ Object Model (1996)[12] como compiladores
convertem cdigo de programas C++ em mapeamentos de memria. Lippman trabalhou implementando e
mantendo o C-front, a implementao original do C++ nos Bell Labs.

Stroustrup sempre desejou que o C++ fosse mantido como uma linguagem de especificao pequena, apesar de
presses externas para adies de novas funcionalidades na especificao da prpria linguagem ao invs da
codificao de novas bibliotecas para a biblioteca padro. Brian Kernighan notou que enquanto em C existe
geralmente uma maneira de resolver problemas, em C++ existem vrias. Na maioria das linguagens de
programao, um padro ou um conjunto bastante restrito de padres de projeto de software escolhido para o
desenvolvimento. Entretanto, isso no acontece em C++, pois a escolha delegada ao desenvolvedor. um
conceito que prega que no existe paradigma de programao ou padro de desenvolvimento que resolva todos
os problemas, por isso a pluralidade e generalidade de aplicaes para a linguagem. Tal filosofia assusta
iniciantes e professores, que sentem que a linguagem deveria ser de fcil aprendizado, algo que o C++ no .

Biblioteca padro

A biblioteca padro do C++ incorpora a biblioteca padro do C com algumas pequenas modificaes para
trabalhar melhor com as novas funcionalidades criadas pela linguagem. Outra grande parte da biblioteca
composta pela biblioteca padro de gabaritos (STL). Ela fornece ferramentas teis como containers (vetores,
listas, entre outros), algoritmos (filtragem de elementos de container, busca, ordenao, entre outros) e
iteradores (ponteiros inteligentes genricos para acessar tais containers e interlig-los aos algoritmos). Usando
gabaritos possvel escrever algoritmos genricos que funcionam para qualquer container ou sequncia
definida por iteradores. Tendo em vista que um iterador nada mais que um ponteiro encapsulado, possvel
tambm utilizar os algoritmos genricos em vetores C, utilizando-se ponteiros comuns para tal. Como em C, os
mdulos da biblioteca so acessadas utilizando a diretiva #include; ao todo so fornecidos 69 cabealhos-
padro, dos quais 19 esto em depreciao.

Devido ao fato da biblioteca padro ter sido desenvolvida por especialistas e de j ter sido amplamente utilizada
comercialmente e academicamente, recomendado utilizar seus componentes ao invs de componentes
prprios. Por exemplo, utilizar std::vector e std::string ao invs de declarar vetores herdados do C no
somente torna o desenvolvimento mais simples, como tambm traz mais segurana e escalabilidade para o
sistema.

A biblioteca STL foi originalmente desenvolvida pela HP[6] e posteriormente pela SGI, antes de sua
incorporao na biblioteca padro do C++. O padro no a define como "STL", mas ainda utiliza-se esse termo
para distingui-la do resto da biblioteca. O projeto STLPort mantm uma implementao atualizada da
biblioteca, e baseado na SGI STL. O projeto Boost fornece elementos adicionais STL, dos quais alguns j
so considerados a serem parte da biblioteca padro no futuro.
Operadores

Os operadores em C++ so um conjunto de todos os operadores do C mais novas adies linguagem. Um


grupo de novos operadores do C++ so os relativos converso de tipo de dado, e consistem em const_cast,
static_cast, dynamic_cast e reinterpret_cast. Eles so uma evoluo a converso de dados utilizada em
C, que limitava-se a oferecer um mtodo para converso tal qual static_cast. dynamic_cast refere-se
diretamente ao suporte de herana e polimorfismo oferecido pela linguagem, e est relacionado a outro novo
operador, typeid, que retorna informaes sobre o tipo de dado derivado pelo operando. Ambos os operadores
requerem a habilitao de RTTI para funcionar. Outro grupo de novos operadores so os relativos alocao de
memria, e consistem em new e delete. Assemelham-se s funes malloc e free respectivamente, que esto
presentes na biblioteca padro do C. Outro novo operador o de resoluo de mbito, ::, e que refere-se
diretamente ao suporte de espao de nomes e orientao a objeto oferecido pela linguagem. Com ele possvel
declarar e acessar espaos de nomes, e tambm declarar classes e acessar objetos.

O C++ define que alguns dos operadores podem ser sobrecarregados, o que permite, assim como na sobrecarga
de funes, que diferentes tipos de dados sejam passados para um operador de forma a produzir diferentes
resultados. Essa tcnica tambm permite que classes definidas por utilizadores tambm possam usufruir de
operadores prprios, tornando possvel que uma classe Lista possa sobrecarregar o operador de apndice +=
para que diversos elementos possam ser adicionados a lista, como elementos ou outras listas. Alguns
operadores de classes definidas pelo utilizador devem ser obrigatoriamente sobrecarregados (definidos) a fim
de poderem ser utilizados pela STL. Por exemplo, uma classe Funcionario deve fornecer o operador menor que
(<) para ser utilizada pela funo de ordenao (sort). De acordo com o padro atual da linguagem, este
requerimento implcito durante a compilao: caso a funo sort seja invocada para a um container da classe
Funcionario e esta no define o operador <, h erro de compilao. Para padres futuros planeja-se introduzir os
"conceitos", que auxiliaram a programao genrica na especificao dos requerimentos de um tipo de dado
para que ele seja usado em uma funo. Por exemplo, os iteradores passados para sort estaro associados ao
conceito "tipo de dado comparvel", isto , um tipo de dado que declara o operador <. Ao explicitar essa
relao o cdigo se torna mais consistente, e o compilador auxiliado a fim de retornar uma mensagem de erro
mais adequada ao utilizador caso haja problemas durante a compilao.

Pr-processador

O C++ compilado em trs fases: pr-processamento, compilao propriamente dita (traduo para cdigo
objeto) e ligao.[13][14] Durante a primeira fase, as diretivas de pr-processamento so aplicadas atravs de
transformaes lxicas no prprio cdigo fonte, que ento alimenta as prximas fases de compilao. Elas so
identificadas no cdigo atravs do caractere #. O pr-processamento utilizado para substituir partes de cdigo,
para inutilizar partes de cdigo e para importar mdulos externos.

Por exemplo, o cdigo #define PI 3.1415926535897932384626433 far com que sempre que PI aparecer no
cdigo, este ser substitudo por 3.1415926535897932384626433 e isso ocorre antes de comear a compilar,
como se o usurio tivesse digitado o valor de PI ao invs do texto PI. Outro uso do pr-processador o que
segue: #include <iostream> far com que seja includo (importado) todo o contedo da cabealho iostream
da biblioteca libc.

Gabaritos

Os gabaritos so diferentes de macros de programao (que tambm podem ser usadas em C++, um artifcio
herdado do C): enquanto ambas as facilidades podem ser utilizadas para produzir cdigo em tempo de
compilao, gabaritos no restringem-se substituies lxicas. Eles possuem conhecimento da semntica e do
sistema de tipagem da linguagem, e so utilizados principalmente para polimorfismo esttico (ver exemplo em
anexo) e programao genrica. Um gabarito tambm uma mquina de Turing completa.
No campo de programao genrica, um tipo de dado parametrizado em C++ chamado uma classe gabarito.
Ela define atravs de parmetros como devem ser os tipos de dado internos utilizados ao instanciar o objeto.
Dessa maneira possvel codificar uma classe genrica arranjo, que ao ser instanciada pode tornar-se um
arranjo de nmeros inteiros ou um arranjo de carros de corrida (desde que carro de corrida esteja definido no
mbito da instancializao).

Objetos

O C++ introduziu alguns conceitos de orientao a objetos ao C, como exemplificado pelas classes, que
apresentam quatro caractersticas comumente presentes em linguagens de programao orientadas a objeto:
abstrao, encapsulamento, herana e polimorfismo. Cada vez que uma classe instanciada criado um objeto
na memria, que basicamente um conjunto de atributos e operaes reunidos.

Encapsulamento

O encapsulamento permite que os atributos de classes possam ser declarados como pblicos, privados ou
protegidos. Um atributo pblico (o menos restrito) pode ser acessado a partir de qualquer mtodo que tenha
acesso ao objeto. Um atributo privado (o mais restrito) s pode ser acessado por mtodos da prpria classe e
por mtodos explicitamente declarados como permitidos para tal (utilizando a palavra reservada friend).
Atributos protegidos s podem ser acessados por mtodos da mesma classe, por mtodos de classes herdadas e
por mtodos explicitamente declarados (utilizando a palavra reservada friend). considerado como uma boa
prtica de programao restringir ao mximo o acesso aos atributos, de forma a isolar detalhes de
implementao de uma classe, tornando pblicas somente as funes membro que realizam uma interface
mnima da classe com outros componentes.

O isolamento dos dados proposto pelo encapsulamento no infalvel, podendo ser contornado ao realizar
operaes de baixo nvel em objetos. Dessa maneira, um atributo privado pode ser acessado e modificado a
partir de um ponteiro para seu endereo de memria sem problemas, ainda que isso seja considerado uma m
prtica de programao. Tal caracterstica, herdada da linguagem C, reflexo direto da liberdade que o C++
fornece ao desenvolvedor em relao a padres de projeto de software, cabendo a ele decidir qual o mais
adequado para seu algoritmo. O desenvolvedor tanto pode esquecer tal caracterstica, atendo-se somente a
detalhes de especificao em alto nvel, quanto adequar tais caractersticas em sua especificao de forma mais
baixo nvel, visando desempenho ou algum outro objetivo.

Herana

A herana de uma classe para com outra pode ser declarada como pblica, protegida ou privada. Isso determina
o quo relacionadas as classes sero entre si. Somente a herana pblica corresponde ao conceito usual de
herana, pois permite acesso total aos atributos da classe-base. Entretanto, pode-se tambm declarar heranas
protegidas e privadas, com caractersticas parecidas como as detalhadas anteriormente sobre encapsulamento.
Essa funcionalidade adicionou ao C++ a possibilidade de criao de classes abstratas, que no podem ser
instanciadas, mas que oferecem interfaces de funcionamento para suas respectivas classes herdadas. Ela um
princpio bsico da orientao a objeto para a reutilizao de cdigo, pois permite que classes (possivelmente
escritas por outros desenvolvedores e ento no modificveis) possam ser herdadas de forma a ser
incrementadas em funcionalidade.

A herana mltipla uma das caractersticas do C++ mais controversas. Ela permite que uma classe possa ser
derivada de mais de uma classe base, o que pode resultar em um complicado grafo de herana e relacionamento
entre classes. Por exemplo, uma classe Gato voador pode ser derivada tanto das classes Gato quanto Mamfero
voador. A mistura de heranas reflete em uma mistura de espaos de nomes na classe herdada, o que pode ser
resolvido atravs da declarao local de espao de nomes, como explicado adiante.

Polimorfismo
Polimorfismo a capacidade de usar um operador ou uma funo de diferentes maneiras, permitir fornecer
diferentes significados de acordo com o contexto. Uma vez que um aplicativo escrito utilizando o conceito de
polimorfismo, pode ser facilmente estendido, oferecendo novos objetos que estejam em conformidade com a
interface original. No necessrio recompilar programas originais, adicionando novos tipos. Apenas a re-
vinculao necessria para expor as novas mudanas juntamente com a antiga aplicao. Ele auxilia na
reutilizao de cdigo e contribui para a criao de aplicaes robustas. C++ suporta diversos tipos de
polimorfismos, sejam estticos (resolvidos em tempo de compilao de cdigo) ou dinmicos (resolvidos em
tempo de execuo de cdigo).

Esttico

A sobrecarga de funes um polimorfismo esttico que permite que um programa possa declarar vrias
funes com o mesmo nome, diferenciando entre si pela quantidade de parmetros apresentados e por seus
respectivos tipos de dado. Assim, o mesmo nome de funo pode referir-se a diferentes funes dependendo do
contexto em que ela usada. O tipo retornado pela funo no utilizado para distinguir funes
sobrecarregadas. A sobrecarga de operadores tambm um polimorfismo esttico que permite que a definio
de certos operadores resultem em uma chamada de funo que depende dos tipos de dado dos operadores sendo
utilizados.

O C++ tambm suporta argumentos padro para os parmetros das funes, o que permite omitir tal parmetro
na invocao da funo. Quando uma funo chamada com menos argumentos que o esperado e os
argumentos explcitos so compatveis com os parmetros da esquerda direita, os ltimos parmetros so
atribudos de acordo com o argumento padro. Semanticamente parecida com a sobrecarga de funes, essa
tcnica permite simplificar situaes em que uma funo declarada somente para invocar uma sobrecarga dela
prpria com algum parmetro especificado.

O C++ implementa polimorfismo paramtrico atravs de gabaritos, que fazem o compilador gere uma instncia
separada da classe ou funo usada como gabarito para cada permutao de parmetros de tipo usado com ele,
o que pode levar a dificultar a depurao de cdigo. Um benefcio que os gabaritos C++ tm sobre Java e C
permitir a metaprogramao por gabaritos, uma forma de pr-avaliao de parte do cdigo em tempo de
compilao ao invs de tempo de execuo.

Os gabaritos em C++ fornecem um mecanismo sofisticado para a criao de cdigo genrico polimrfico. Em
particular, por meio da tcnica Curiously Recurring Template Pattern possvel implementar uma forma de
polimorfismo esttico que imita a sintaxe para substituir as funes virtuais. Uma vez que gabaritos so
sensveis aos tipos de dados e tambm so Turing completos, tambm podem ser usados para permitir que o
compilador resolva condicionais recursivas e gerar programas substanciais atravs de metaprogramao por
gabaritos.

Entre os usos de polimorfismo esttico, inclui-se funes com o mesmo nome mas que tratam de diferentes
parmetros, como soma(int, int) e soma(double, double) (o que, entretanto, ignora as facilidades dos
gabaritos.) Tambm, verses novas da mesma funo que recebem parmetros adicionais, como
ExportarDados(void* buffer, int tamanho) e ExportarDados(void* buffer, int tamanho, unsigned
long opcoes). Mais um uso um mesmo nome de mtodo para atribuir ou obter o valor de uma propriedade,
como Classe::Propriedade(int x) e int x Class::Property() const.

Dinmico

O polimorfismo por herana um exemplo de polimorfismo dinmico no qual ponteiros de uma classe base
podem referenciar objetos de classes derivadas, o que permite que uma chamada de funo virtual seja
resolvida em tempo de execuo de cdigo. Ponteiros e referncias de uma classe base podem referenciar
objetos de qualquer classe derivada de si, o que permite que arranjos e outros containers de um dado tipo
possam armazenar ponteiros de diversos tipos de dados, o que no poderia ser feito de outra maneira em C++.
Como no possvel descobrir se a converso do tipo base para o tipo derivado segura em tempo de
compilao, a verificao deve ser feita durante a execuo do cdigo. Para isso fornecido o operador
dynamic_cast, que permite tentar a converso segura de uma classe mais abstrata (classe base) para outra mais
especfica (classe derivada). Para sua utilizao a linguagem dispe do RTTI, uma tcnica para manter em
memria informaes sobre o tipo de dado de objetos. Caso a converso no seja possvel uma exceo
especfica lanada.

Normalmente, quando uma funo em uma classe derivada substitui uma funo em uma classe base, a funo
chamada determinada pelo tipo do objeto. Uma dada funo sobrescrita quando no existe nenhuma
diferena no nmero ou tipo de parmetros, entre duas ou mais definies para aquela funo. Assim, em
tempo de compilao pode no ser possvel determinar o tipo do objeto e, portanto, a funo a ser chamada,
tendo apenas um ponteiro de classe base, a deciso adiada at o tempo de execuo. Isso chamado de
despache dinmico. Funes ou mtodos virtuais permitem a implementao mais especfica da funo a ser
chamada, de acordo com o tipo do objeto em tempo real. Em C++, isto geralmente feito usando tabelas de
funes virtuais. Se o tipo de objeto conhecido, isso pode ser contornado, antecipando o nome da classe antes
da chamada de funo, mas, em geral chamadas de funes virtuais so resolvidas em tempo de execuo.

Alm das funes de membro padro, sobrecargas do operador e destrutores podem ser virtuais. A regra geral
que, se todas as funes da classe so virtuais, o destrutor tambm deve ser assim. Como o tipo de criao de
um objeto conhecido em tempo de compilao, construtores de cpia e de extenso, no pode ser virtuais. No
entanto pode acontecer de uma cpia de um objeto ser criado quando um ponteiro para um objeto derivado
passado como um ponteiro para um objeto base. Nesse caso, uma soluo comum criar um clone() (ou
similar) e declarar que a funo como virtual. O mtodo clone() cria e retorna uma cpia da classe quando
chamado.

Um membro da funo tambm pode ser declarado puramente virtual, acrescentando = 0 aps o parntese de
fechamento e antes do ponto e vrgula. Os objetos no podem ser criados de uma classe com uma funo virtual
pura e so chamados de tipos de dados abstratos. Esses tipos de dados abstratos s podem ser derivados.
Qualquer classe derivada herda a funo virtual pura deve apresentar uma definio no-pura (e todas as outras
funes virtuais puras), antes de objetos da classe derivada poderem ser criados.

Regra dos trs

Uma regra informal no desenvolvimento orientado a objeto em C++ clama que se uma classe ou estrutura
possui um dos seguintes itens, ela provavelmente deveria ter todos os trs:[15] destrutor, construtor de cpia e
operador de atribuio (=).

Esse trs mtodos so funes membros especiais criadas pelo compilador automaticamente se no so
definidas pelo desenvolvedor.[nota 4] Se um desses mtodos definido explicitamente pelo desenvolvedor, isso
significa que a verso gerada pelo compilador no serve para um dos casos, e portanto muito provavelmente
tambm no serve para os outros casos.

Um adendo a essa regra diz respeito tcnica RAII:[16] se ela for usada ento o destrutor pode ser deixado sem
definio (tambm conhecida como "regra dos dois"[17]).

Tratamento de excees

O tratamento de exceo um mecanismo desenvolvido para lidar com a ocorrncia de algumas condies
(chamadas excees) que alteram o funcionamento normal do fluxo de um programa de computador. O C++
suporta tal tratamento, de forma que o estado atual de um programa aps uma exceo alterado
automaticamente para outro estado pr-definido para a recuperao do sistema.

Para isso foram adicionadas linguagem as palavras reservadas try e catch. A primeira especifica um bloco
de cdigo que ser vigiado em relao excees, de forma que se uma for identificada, o fluxo de programa
ser desviado para um bloco especificado pela segunda palavra reservada. Para um dado bloco try podem
existir diversos blocos catch, capturando excees de diferentes tipos de dado. Alternativamente, a sintaxe
catch() foi introduzida para especificar um bloco de tratamento de exceo independente do tipo da exceo,
genrico.

O conceito puro da cincia da computao para tratamento de excees ainda inclui o bloco de instrues
finally, que indica um bloco de cdigo executado aps um bloco try caso nenhuma exceo tenha sido
lanada, indicando sucesso na operao. Tal abordagem no foi adicionada ao C++, sendo substituvel por
outras tcnicas como RAII[16][18].

Espao de nomes

O C++ introduziu os espaos de nomes para a organizao das bibliotecas, e sua funo agrupar um contexto
para identificadores (variveis, funes, classes, estruturas, entre outros). No contexto de sistemas operativos, o
espao de nomes poderia ser representado por diretrios. Toda a biblioteca padro est contida no espao de
nomes std (abreviao de standard, que em ingls significa padro). Para utilizar um espao de nomes pode
ser feita tanto uma declarao global dos espaos quanto local. Uma declarao global normalmente inserida
no incio dos mdulos, aps a importao dos mdulos externos, utilizando a palavra reservada using (como
em using namespace std;, ver exemplo contextualizado em anexo). Ela tambm pode ser usada em um
mbito pr-determinado por um bloco de cdigo. Uma declarao local inserida antes de invocar o
identificador envolvido, utilizando o operador de resoluo de mbito :: (como em std::cout, ver exemplo
contextualizado em anexo). A declarao global til para reduzir a quantidade de cdigo produzido, sub
entendendo a origem dos identificadores utilizados em todo um mbito. Apesar disso, ela deixa margem
ambiguidades, pois possvel que um mesmo identificador esteja presente em mais de um espao de nome
importado no mdulo. Para eliminar esse problema deve-se, alm de utilizar a declarao global, declarar o
identificador ambguo localmente cada vez que ele for utilizado.

Em determinadas ocasies, espaos de nome no considerados durante a primeira verificao do espao de


nomes de uma funo podem tambm ser utilizados na busca, dependendo dos tipos de dados utilizados nos
argumentos. A tcnica, chamada busca de nomes dependente de argumento ou Koening lookup, ocorre quando
a busca explcita pela funo no encontra correspondente, comeando ento a procurar por espaos de nomes
associados. Um padro muito utilizado pela Standard Template Library declarar sobrecarga de operadores que
somente so encontrados pelo compilador atravs dessa tcnica.

Ponteiros e referncias

O C++ herdou a funcionalidade de ponteiros do C e toda a aritmtica de ponteiros disponvel para aquela
linguagem: tratando um ponteiro como um tipo inteiro possvel mover-se facilmente por regies de memria.
A instncia de um ponteiro em C++ uma varivel que armazena um endereo de memria, e que pode ser
nula. A biblioteca padro ainda fornece auto_ptr, uma espcie de ponteiro inteligente para contagem de
referncias que pode ser utilizado em algumas situaes como uma alternativa segura aos ponteiros primitivos
do C, automatizando o processo de desalocao de memria do objeto apontado pelo ponteiro.

Por questes de segurana, o C++ introduziu tambm o tipo de dado referncia, um tipo mais restrito de
ponteiro. Uma referncia definida para outro objeto no pode ser mais referenciada, qualquer ocorrncia do
nome no cdigo diz respeito ao objeto referenciado. Como consequncia, no possvel realizar "aritmtica de
referncias". Outra consequncia que no possvel alterar uma referncia para que ela defina outro objeto;
aps definida, essa relao vale para todo o tempo de vida. Em contrapartida, um mesmo ponteiro
frequentemente aponta para diferentes reas de memria.

Apesar de teoricamente possvel[nota 5], a existncia de referncias nulas no considerada, podendo-se assumir
que uma referncia sempre indica um objeto vlido em memria.

Incompatibilidade com C
incorreto considerar o C++ como um super conjunto de C, isto , uma linguagem que implementa o C
completamente e que adiciona novas funcionalidades.[19] Grande parte de cdigo C pode ser perfeitamente
compilado em C++, mas existem algumas pequenas diferenas sintticas e semnticas entre as linguagens que
tornam alguns trechos de cdigo C vlidos em cdigo C++ invlido, ou cdigos que exibem comportamentos
diferentes em cada linguagem.[20]

Talvez a diferena mais comum que C permite a converso implcita entre o tipo de dado void* para
ponteiros para outros tipos, algo que o C++ no permite. Logo, o seguinte cdigo em C vlido:

int *i = malloc (sizeof (int) * 5); /* converso implcita de void* para int* */

Para assegurar-se que o cdigo funcione tanto em C quanto C++ necessrio explicitar a converso,
acrescentando o que chamado de "cast":

int *i = (int *) malloc (sizeof (int) * 5); /* converso explcita de void* para int* */

Outra questo de portabilidade entre as linguagens o fato do C++ adicionar vrias novas palavras reservadas,
como new e class, que podem ser utilizadas como identificadores (por exemplo nomes de variveis) em C,
gerando incompatibilidade.

Algumas outras incompatibilidades foram removidas no padro C99, que agora suporta facilidades como
comentrios por //.[20] Tanto C99 quanto C++ definem o tipo de dado bool e suas respectivas constantes true
e false. Apesar disso, enquanto a definio no C++ embarcada na prpria linguagem, tornando tais
elementos palavras reservadas, em C tais identificadores so declarados atravs da biblioteca padro
stdbool.h.

Algumas construes sintticas so vlidas tanto em C quanto C++, mas produzem resultado diferente. Por
exemplo, o valor literal 'a' possui tipo de dado int em C e char em C++, o que significa que uma chamada
sizeof('a'), que retorna a quantidade de bytes ocupada pelo identificador, pode resultar em resultados
diferentes entre as duas linguagens. Na prtica, esse exemplo especfico no realmente um problema j que
caracteres literais so convertidos para o tipo int implicitamente pelo compilador tanto em C quanto em C++.

Anlise sinttica do cdigo fonte

Como a gramtica C++ bastante complexa, difcil construir um bom analisador sinttico para cdigo fonte
C++ utilizando algoritmos clssicos como o LALR(1).[21] Por exemplo, com o LALR possvel analisar
cdigo Java.[22] A flexibilidade da linguagem tambm fruto de ambiguidades que um analisador simples no
consegue distinguir. Por esse motivo, existem poucas ferramentas para anlise e transformao no trivial de
cdigo, como refatorao. Em suas primeiras especificaes o C++ era uma gramtica LALR, entretanto, com a
adio de funcionalidades como espao de nomes, excees, gabaritos e o tipo bool, essa caracterstica logo se
tornou invlida.[21]

A anlise sinttica no a tarefa mais difcil na construo de uma ferramenta C++. Outras tarefas incluem
entender o significado dos identificadores do programa que um compilador deve possuir. Sistemas prticos de
processamento no devem somente analisar o cdigo fonte, mas tambm compreender exatamente cada
identificador em diferentes usos, lidando com as regras de mbito de identificadores (ver um cdigo
contextualizado em anexo).

O grupo Boost possui um projeto para a construo de um analisador sinttico C++ com base na biblioteca
Spirit,[23] de forma que se torna um mtodo padro e livre de anlise sinttica para a linguagem.
Exemplos de cdigo
Exemplo de um programa que imprime na tela "Ol, Mundo!".

# include <iostream>

int main()
{
std::cout << "Ol, Mundo!" << std::endl;
return 0;
}

Crticas

C faz com que dar um tiro no p seja fcil; C++ torna isso mais difcil, mas quando ns o
fazemos arrebentamos com a perna toda.
A citao de Stroutrup trata com humor o fato de o C++, ao possibilitar a programao de alto nvel, ter
facilitado a codificao de algoritmos e organizao de projetos em relao ao C, uma linguagem que requer
constante ateno contra erros lgicos de programao devido sua alta flexibilidade. Por outro lado, o C++
possui nuances da sintaxe e semntica da linguagem muito sutis, difceis de serem identificados, e que quando
no percebidos podem levar a comportamentos indesejados no cdigo.

Pontos positivos do C++ incluem a produo de cdigo o quanto mais eficiente possvel, fazendo uso de
otimizaes agressivas e sofisticadas dos compiladores. Entretanto, a linguagem ainda mantm alta
flexibilidade, portabilidade e consistncia. Um exemplo da flexibilidade a possibilidade de programao de
alto e baixo nvel. Outro exemplo a possibilidade de metaprogramao e programao genrica. Mais um
ponto positivo ampla disponibilidade e suporte, devido principalmente grande base de desenvolvedores.
Alm disso, a compatibilidade com C resulta em vasta base de cdigo. Fora do lado tcnico, um positivo que
a linguagem no est sob o domnio duma empresa (em contraste do Java Sun Microsystems (atualmente
pertencente a Oracle Corporation) ou Visual Basic Microsoft); a padronizao responsabilidade da ISO.

Por outro lado, pontos negativos do C++ incluem grande perodo para o aprendizado devido complexidade da
linguagem. Tambm, os compiladores atuais, que nem sempre produzem o cdigo mais otimizado, tanto em
velocidade quanto tamanho do cdigo, e que geralmente produzem mensagens de erro difceis de serem
interpretadas em problemas relacionados com gabaritos. Ainda relacionado a aprendizado e uso, a biblioteca
padro no cobre reas importantes da programao, como threads (suportada por C++11), conexes TCP/IP,
interface grfica e manipulao de sistemas de arquivos, o que implica na necessidade de criao de bibliotecas
prprias para tal, que pecam em portabilidade e padronizao. Apesar da ampla base de cdigo legada do C, o
C++ tambm herdou daquela linguagem problemas de entendimento de sintaxe do mesmo. Mais um ponto
negativo que devido grande flexibilidade no desenvolvimento, recomendado o uso de padres de
programao mais amplamente que em outras linguagens.

Comunidade de desenvolvimento
Pessoas notveis

O desenvolvimento da linguagem C++ fruto do trabalho de milhares de pessoas associadas academia e


indstria de software, e pode consistir na utilizao da linguagem, em seu ensino, na construo de bibliotecas
de rotinas ou na participao no comit de padronizao, entre outras atividades. Algumas pessoas tiveram
participao fundamental durante a histria para o desenvolvimento.[24] Primeiramente, o prprio Bjarne
Stroustrup, criador da linguagem e de seu primeiro compilador.[1] O cientista ainda participa na padronizao e
divulga o C++ no meio acadmico. Andrew Koenig outro pesquisador notvel, bastante atuante na
padronizao e creditado pela tcnica Koenig lookup (demonstrada em anexo). J Scott Meyers um doutor em
cincia da computao, e escritor de diversos livros sobre o desenvolvimento de software utilizando a
linguagem. Assim como Meyers, Herb Sutter escritor de diversos livros sobre C++ e centenas de colunas e
artigos, e um notvel pesquisador sobre programao concorrente e multitarefa. Andrei Alexandrescu
considerado um dos maiores especialistas em programao C++ avanada. Na rea de programao genrica
destaca-se o programador russo Alexander Stepanov, a figura chave na criao da Standard Template Library.

Biblioteca Boost

Parte da comunidade de desenvolvimento do C++ foi responsvel pela criao da Boost, um conjunto de
bibliotecas que estendem a funcionalidade da linguagem, mais especificamente, da biblioteca padro. O
processo de disponibilizao de bibliotecas da Boost mais rpido do que o do comit de padronizao da
linguagem, e o projeto acaba servindo como uma forma de teste em campo das bibliotecas, que eventualmente
podem ser migradas para a especificao da linguagem. Para o TR1 do C++0x, pelo menos dez bibliotecas j
foram aceitas.[25] A base de usurios da Boost grande, o que reflete no controle de qualidade.
Funcionalidades oferecidas vo desde bibliotecas gerais como smart_ptr[26] a abstraes do sistema
operacional como o filesystem[27] a bibliotecas para usurios avanados como a MPL.[28]

Ferramentas
Ambientes de desenvolvimento

Abaixo mostrada uma lista dos principais ambientes de desenvolvimento C++, sejam eles compiladores ou
ambientes de desenvolvimento integrado (IDE).

Nome Comentrio Tipo de licena Plataformas
compilador? IDE? depurador?
Um componente do Unix, Linux,
GCC, compilador Mac OS X,
G++ Livre
padro do Projecto Windows e
GNU AmigaOS
IDE multiplataforma.
Usa CMake como
modelo de projeto e
JetBrains Linux, Mac OS
MinGW ou Cygwin Proprietrio
CLion X e Windows
como compiladores (em
Windows) e GCC (em
Linux).
IDE livre famosa entre
iniciantes. Seu
Dev-C++ compilador o Livre Windows[nota 6]
MinGW, uma verso do
G++ para Windows.
U++ um framework
C++ multi-plataforma,
Unix, Linux,
para desenvolvimento
Ultimate++ Livre Mac OS X e
rpido de aplicaes,
Windows
focado na produtividade
de programadores.
Produz cdigo
Windows e
Intel C++ otimizado para Proprietria
Linux
processadores Intel
o mais conhecido
para a plataforma
Windows, com
ferramentas e
tecnologias auxiliares
Microsoft para desenvolvimento
Proprietria Windows
Visual C++ nessa plataforma (como
MFC, ATL, COM, entre
outras). Oferece ainda
uma verso gratuita
com restries de
uso[29]
Ferramenta da
Embarcadero
(anteriormente da
Borland), que
compartilha a mesma
IDE do Delphi chamada
C++ Builder Proprietria Windows
de RAD Studio, sendo
possvel a utilizao dos
mesmos componentes
visuais do Delphi
(VCL) em um cdigo
C++.
Qt Creator IDE especializada em Livre/Proprietria Linux,
(mas no restrita a) Windows e
desenvolvimento na Mac OS X
plataforma Qt. Utiliza o
g++ como compilador e
o gdb como depurador
(ou seus equivalentes
para MinGW em
Windows).
Suporta plataformas
DOS,
Open antigas, at ento sem
Livre Windows, OS/2
Watcom suporte completo
e Netware
biblioteca padro
Pode ser experimentado Windows,
Comeau C++ Proprietria
pela Internet[30] Linux e Solaris
Possui verso
gratuita[31] no stio
Turbo C++ oficial e tambm uma Proprietria Windows
verso paga.[32]
similar ao C++ Builder.
Disponvel para C++
atravs da extenso Windows,
Eclipse Livre
Linux, JVM
CDT.[33]
Possui verso
Windows,
especializada para C++
NetBeans Livre Linux, Mac OS
e tambm disponvel
X, JVM
atravs de um plugin.
Suporta muitas
capacidades avanadas
como gerenciamento de
projetos e um poderoso
Anjuta editor de cdigo fonte. Livre Linux
Uma nova verso do
Anjuta (Anjuta 2.*) que
integra o Glade est em
desenvolvimento ativo.
Ambiente aberto e
multi-plataforma, em
sua verso para
Windows utiliza o
compilador MinGW, Windows,
Code::Blocks apesar de tambm Livre Linux, Mac OS
suportar outros X
compiladores como o
Visual C++, Digital
Mars, Borland C++ 5.5
e Open Watcom.[34]
Digital Mars Proprietria Windows, DOS
Windows,
Codelite Livre Linux, Mac OS
X
Windows,
Geany Livre
Linux
GNAT Utiliza o compilador Livre Windows,
Programming GCC Linux, Solaris
Studio
Utiliza o compilador Windows,
KDevelop Livre
GCC Linux

Aplicativos desenvolvidos em C++

Abaixo segue uma lista de exemplos de aplicativos parcial ou totalmente escritos em C++, de acordo com
Bjarne Stroustrup, que no garante sua preciso e veracidade, ainda que seja responsvel por sua
publicao.[35]

Adobe Acrobat Maya


Adobe Illustrator Mars Pathfinder, Opportunity e outras sondas da
Adobe Photoshop NASA
Amazon Microsoft Office
BeOS Microsoft Visual Studio (Visual Basic, Visual
Blender FoxPro, Visual C++)
Common Desktop Environment Microsoft Windows (diversas verses)
Doom III (motor de jogo) Mozilla Firefox
eMule Mozilla Thunderbird
Motores de busca Google, em especial MySQL
Googlebot[36] Mquina virtual Java
Srie Half-Life LibreOffice
Internet Explorer Outlook Express
iPod (GUI) PCSX2 (Emulador de Playstation 2)
KDE (Qt) SETI@home
Lunar Magic Symbian OS
Mac OS X Winamp
Tibia
Unreal Engine 3
Unreal Engine 4

Ver tambm
Biblioteca padro do C++
Biblioteca Boost
Operadores em C e C++
Orientao a objetos
Standard Template Library
Lista de exemplos de cdigo C++

Notas
1. Uma discusso sobre o tema encontra-se na seo de incompatibilidades.
2. Mais informaes sobre o C++ ABI podem ser obtidas nosumrio sobre a extenso(http://www.codesourcery.com/cxx-
abi) (em ingls)
3. Um exemplo o livro de Ivor Horton:

Ivor Horton (2004).Beginning ANSI C++3 ed. [S.l.]: APRESS. 827 pginas.ISBN 1-59059-227-1

4. O construtor padro tambm criado automaticamente pelo compilador caso o desenvolvedor no tenha definido
nenhum outro construtor para a classe.
5. Dado um tipo de dadoT, uma referncia pode ser definida para nulo atravs deT& var = *(T*)0; . Notar entretanto
que obter o contedo de nulo resulta emcomportamento indefinido, o que indica m prtica de programao.
6. Uma verso para Linux (http://freshmeat.net/projects/dev-cpp)comeou a ser desenvolvida, mas foi abandonada em
2002

Referncias
15. Marshall P. Cline; Greg Lomow; Mike Girou (1998).
1. Naomi Hamilton (25 de junho de 2008).The A-Z of C++ FAQs 2 ed. [S.l.]: Addison-Wesley Professional.
Programming Languages: C++(http://www.computer 624 pginas. ISBN 978-0201309836
world.com.au/index.php/id;408408016;fp;16;fpid;1;pf; 16. Bjarne Stroustrup. resource acquisition is
1). Entrevista com Bjarne Stroustrup (em ingls). initialization (http://www.research.att.com/~bs/glossa
Computerworld. Consultado em 25 de junho de 2008 ry.html) (em ingls). Glossrio de Bjarne Stroustrup
2. Bjarne Stroustrup (maio de 2005). The Design of 17. Bjorn Karlsson e Matthew Wilson (1 de outubro de
C++0x (http://www.research.att.com/~bs/rules.pdf) 2004). The Law of The Big Two (http://www.artima.
(PDF) (em ingls). C/C++ Users Journal com/cppsource/bigtwo.html)(em ingls). C++ Source.
3. Doc No. 2697: ISO/IEC DTR 19768 (June 15, 2008) Consultado em 21 de abril de 2007
Minutes of WG21 Meeting June 8-15, 2008(http://w 18. Herb Sutter realiza uma comparao entre as tcnicas
ww.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n26 RAII e Dispose (que depende do conceito definally)
97.html) (em ingls). Consultado em 26 de agosto de em seu blog pessoal:
2010 Herb Sutter (31 de agosto de 2004).C++ RAII
4. We have an international standard: C++0x is compared with Java Dispose pattern(http://blogs.msd
unanimously approved(http://herbsutter.com/2011/0 n.com/hsutter/archive/2004/07/31/203137.aspx)(em
8/12/we-have-an-international-standard-c0x-is-unanim ingls). Pgina pessoal do autor. Consultado em 29 de
ously-approved/) (em ingls). Consultado em 25 de setembro Verifique data em: |acessodata= (ajuda)
novembro de 2011 19. Bjarne Stroustrup. Is C a subset of C++?(http://publ
5. Bjarne Stroustrup. Quando o C++ foi inventado?(htt ic.research.att.com/~bs/bs_faq.html#C-is-subset)(em
p://public.research.att.com/~bs/bs_faq.html#invention) ingls). FAQ no stio pessoal do autor. Consultado em
(em ingls). FAQ de Bjarne Stroustrup 7 de fevereiro de 2008
6. Alexander Stepanove Meng Lee (7 de maro de 1994). 20. David R. Tribble (5 de agosto de 2001).
The Standard Template Library (http://www.stepano Incompatibilities Between ISO C and ISO C++(htt
vpapers.com/Stepanov-The_Standard_T emplate_Librar p://david.tribble.com/text/cdiffs.htm) (em ingls). Stio
y-1994.pdf) (PDF) (em ingls). Hewlett-Packard, pessoal do autor. Consultado em 28 de setembro de
Technical Report X3J16/94-0095, WG21/N0482 2007
7. Descrio da norma(http://standards.mackido.com/i 21. Andy (Maro de 2001).Parsing C++ (http://www.no
e1/iec-standards24_view_209.html)(em ingls) bugs.org/developer/parsingcpp/)(em ingls).
8. Bjarne Stroustrup. Where did the name "C++" come Consultado em 7 de fevereiro de 2008
from? (http://www.research.att.com/~bs/bs_faq.html# 22. The Java Language Specification LALR(1)
name). FAQ de Bjarne Stroustrup. Consultado em 8 de Grammar (http://java.sun.com/docs/books/jls/first_edi
maro de 2007 tion/html/19.doc.html). The Java Language
9. Herb Sutter, Tom Plum (3 de maro de 2003).Why Specification (em ingls). Sun Microsystems. 3 de abril
We Can't Afford Export (http://www.open-std.org/jtc de 1998. Consultado em 7 de fevereiro de 2008
1/sc22/wg21/docs/papers/2003/n1426.pdf)(PDF) (em 23. Boost.Spirit based C++ parser (library)(http://www.
ingls). Stio oficial do comit de padronizao do crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?B
C++. Consultado em 10 de setembro de 2007 oostSpiritCXXParser)(em ingls). Grupo Boost.
10. J16 Reunio 36/WG21, realizada entre 7 e 1 de abril Consultado em 29 de abril de 2007
de 2003 (http://www.open-std.org/jtc1/sc22/wg21/doc 24. Scott Meyers (30 de agosto de 2006).The Most
s/papers/2003/n1459.html)(em ingls) Important C++ PeopleEver(http://www.artima.co
11. ISO/IEC 14882:2011 (http://www.iso.org/iso/iso_cat m/cppsource/top_cpp_people.html)(em ingls).
alogue/catalogue_tc/catalogue_detail.htm?csnumber=5 Artima Developer. Consultado em 30 de setembro de
0372) (em ingls). stio ISO. 2 de setembro de 2011. 2007
Consultado em 25 de novembro de 2011 25. Library Technical Report (http://www.open-std.org/j
12. Stanley B. Lippman (1996).Inside the C++ Object tc1/sc22/wg21/docs/library_technical_report.html)(em
Model. [S.l.]: Addison-Wesley Professional. ingls). Comit de padronizao do C++. 2 de julho de
304 pginas. ISBN 978-0201834543 2003. Consultado em 18 de outubro de 2008
13. Processo de compilao explicado pela IBM(http:// 26. Boost: Smart Pointers(http://www.boost.org/libs/sm
publib.boulder.ibm.com/infocenter/macxhelp/v6v81/to art_ptr/smart_ptr.htm) (em ingls). Stio oficial da
pic/com.ibm.vacpp6m.doc/getstart/overview/compile_ Boost. 25 de setembro de 2005. Consultado em 17 de
process.htm) (em ingls) fevereiro de 2008
14. Processo de compilao explicado pela HP(http://do 27. Boost: Boost Filesystem Library(http://www.boost.
cs.hp.com/en/92501-90029/ch03s01.html)(em ingls) org/libs/filesystem/doc/index.htm)(em ingls). Stio
oficial da Boost. 3 de junho de 2007. Consultado em 32. Turbo C++ (http://www.turboexplorer.com/cpp) (em
17 de fevereiro de 2008 ingls). Borland. Consultado em 24 de outubro de 2007
28. THE BOOST MPL LIBRARY (http://www.boost.or 33. Eclipse C/C++ Development Tooling - CDT (http://
g/libs/mpl/doc/index.html)(em ingls). Stio oficial da www.eclipse.org/cdt/) (em ingls). Eclipse Foundation.
Boost. 15 de novembro de 2004. Consultado em 17 de Consultado em 24 de outubro de 2007
fevereiro de 2008 34. Code::Blocks Features(http://www.codeblocks.org/f
29. Visual Studio Express(http://msdn2.microsoft.com/e eatures.shtml) (em ingls). Stio oficial do
n-us/express/) (em ingls). MSDN, stio daMicrosoft Code::Blocks. Consultado em 24 de outubro de 2007
Corporation. Consultado em 25 de outubro de 2007 35. Bjarne Stroustrup. C++ Applications(http://www.res
30. Test Drive Comeau C++ Online(http://www.comeau earch.att.com/~bs/applications.html)(em ingls). Stio
computing.com/tryitout)(em ingls). Comeau pessoal de Stroustrup.I (Bjarne Stroustrup) don't
Computing. 31 de maro de 2007. Consultado em 7 de make any guarantees about the accuracy of the list. I
fevereiro de 2008 believe that it's accurate -- I trust the people who sent
31. David Intersimone.Antique Software: Turbo C++ me examples, but I have not seen the source code
version 1.01 (http://community.borland.com/article/0, myself.
1410,21751,00.html)(em ingls). Consultado em 24 de 36. Descrio do Googlebot, desenvolvido em C++(htt
outubro de 2007 p://www.robotstxt.org/wc/active/html/googlebot.html)
(em ingls)

Bibliografia
Bjarne Stroustrup (1994). The Design and Evolution of C++. [S.l.]: Addison-Wesley. ISBN 0-201-
54330-3
Andrei Alexandrescu e Herb Sutter (2004). C++ Design and Coding Standards: Rules and Guidelines
for Writing Programs. [S.l.]: Addison-Wesley. ISBN 0-321-11358-6

Ligaes externas
Material de estudo

Pgina oficial do comit C++ JTC1/SC22/WG21 (http://www.open-std.org/jtc1/sc22/wg21/) (em


ingls)
Happy Codings (http://www.cplusplus.happycodings.com/Algorithms/) (em ingls) algoritmos em
C++
Comparativo entre compiladores (http://cmeerw.org/prog/freecpp/) (em ingls)
Problemas de compatibilidade binria em C++ (http://techbase.kde.org/Policies/Binary_Compatibility_Is
sues_With_C++) (em ingls)
Exemplos de compatibilidade binria em C++ (http://techbase.kde.org/Policies/Binary_Compatibility_Ex
amples) (em ingls)

Bibliotecas e repositrios de cdigo

Poco Project (http://www.pocoproject.org/) (em ingls) conjunto de bibliotecas C++ revisadas por
especialistas.
csourcesearch.net (http://csourcesearch.net/) (em ingls) repositrio de cdigo livre C e C++
CommonCPP (http://www.gnu.org/software/commoncpp/) (em ingls) classes fundamentais portveis
da GNU
STLSoft (http://stlsoft.org/) (em ingls) bibliotecas livres, compostas somente de cabealhos, com o
intuito de servir como extenso STL
C/C++ Reference (http://www.cppreference.com/) (em ingls) referncias de C e C++

Obtida de "https://pt.wikipedia.org/w/index.php?title=C%2B%2B&oldid=48174360"

Categorias: C++ Linguagens de programao orientadas a objetos


Linguagens de programao baseadas em classes
Esta pgina foi modificada pela ltima vez (s) 19h15min de 4 de maro de 2017.
Este texto disponibilizado nos termos da licena Creative Commons - Atribuio - Compartilha Igual
3.0 No Adaptada (CC BY-SA 3.0); pode estar sujeito a condies adicionais. Para mais detalhes,
consulte as condies de uso.

Você também pode gostar