C++
- Appeared in:
- 1985
- Influenced by:
- Influenced:
- Paradigm:
- Typing discipline:
- File extensions:
- .cpp .c++ .cc .h .hpp
- Dialects:
- Versions and implementations (Collapse all | Expand all):
C++ (“C plus plus”) is a middle-level general-purpose programming language that supports multiple programming styles.
Bjarne Stroustrupp was educated in Denmark using Simula. While working for AT&T he had program in C but missed the structurability of Simula. Knowing the relation between Algol-60 and Simula he developed C++.
Language development started in 1979. C++ was developed to enhance C with features which should facilitate large-scale software development while still keeping speed, portability and versatility of the latter. At the same time C++ was designed to be as C-compatible as possible, so most codes written in C will compile as C++ codes. Originally the new language was named “C with classes”, but it was renamed to “C++” to emphasis both its origin from C and its superiority compared to the latter.
C++ was first released for commercial purposes in 1985, along with reference book called “The C++ Programming Language” which became its unofficial standard. C++ 2.0 came in 1989, followed by “The Annotated C++ Reference Manual” book.
The first official standard of the language, ISO/IEC 14882:1998, referred to as C++98, was published in 1998. Its corrected version C++03 followed in 2003. Another important document is “Library Technical Report 1” (TR1 for short), published in 2005, which describes several extensions to the standard library. It is not a part of official standard, but most of currently maintained C++ compilers support it along with 1998 standard. Finally, the current standard of the language is C++11, accepted in 2011.
In 1990th C++ has become, and still remains, one of the most popular programming languages ever seen. As a middle-level language, it is used both for system and application software development.
Language features:
- C++ supports object-oriented programming through class construct. C++ classes provide all four features of OOP: abstraction, encapsulation, inheritance (including multiple) and polymorphism.
- C++ supports generic programming via function and class templating.
- C++ Standard Library consists of standard library with some modifications and Standard Template Library (STL) which provides lots of generic containters and algorithms.
- namespaces,
- virtual functions,
- inline functions,
- operator overloading,
- function overloading,
- exception handling etc.
Elements of syntax:
Inline comments | // |
---|---|
Non-nestable comments | /* ... */ |
Case-sensitivity | yes |
Variable identifier regexp | [_a-zA-Z][_a-zA-Z0-9]* |
Function identifier regexp | [_a-zA-Z][_a-zA-Z0-9]* |
Variable assignment | varname = value |
Variable declaration | type varname |
Variable declaration with assignment | type varname = value |
Grouping expressions | ( ... ) |
Block | { ... } |
Physical (shallow) equality | a == b |
Physical (shallow) inequality | a != b |
Deep equality | *a == *b (a and b are pointers) |
Deep inequality | *a != *b (a and b are pointers) |
Comparison | < > <= >= |
Function definition | returntype functionName (argtype1 argname1, ..., argtypeN argnameN) |
Function call | functionName(arg1, ..., argN) |
Function call with no parameters | functionName() |
Sequence | ; |
If - then | if (condition) trueBlock |
If - then - else | if (condition) trueBlock else falseBlock |
Loop forever | while (true) loopBody |
While condition do | while (condition) loopBody |
Do until condition | do loopBody while (!condition) |
For each value in a numeric range, 1 increment | for (int i = first; i <= last ; i++) loopBody |
For each value in a numeric range, 1 decrement | for (int i = last; i >= first; i--) loopBody |
Examples:
Hello, World!:
Example for versions Borland C++ Builder 6, Microsoft Visual C++ 6, Microsoft Visual C++ 9 (2008), g++ 3.4.5#include <iostream>
int main(void)
{
std::cout << "Hello, World!" << std::endl;
return 0;
}
Factorial:
Example for versions Borland C++ Builder 6, Microsoft Visual C++ 6, Microsoft Visual C++ 9 (2008), g++ 3.4.5This example uses recursive factorial definition.
#include "stdio.h"
__int64 factorial(__int64 n)
{
return ( n==0 ? 1 : n*factorial(n-1) );
}
int main(int argc, char* argv[])
{
for (int n=0; n<=16; n++)
printf( "%d! = %I64d\n", n, factorial(n) );
return 0;
}
Factorial:
Example for versions Borland C++ Builder 6, g++ 3.4.5This example uses recursive factorial definition.
#include <iostream>
unsigned long long factorial(unsigned long long n)
{
if (n == 0)
return 1;
else
return n * factorial (n - 1);
}
int main(void)
{
for (int n = 0; n <= 16; n++)
std::cout << n << "! = " << factorial(n) << std::endl;
return 0;
}
Fibonacci numbers:
Example for versions Borland C++ Builder 6, Microsoft Visual C++ 6, Microsoft Visual C++ 9 (2008), g++ 3.4.5This example uses recursive definition of Fibonacci numbers.
#include <iostream>
int fibonacci(int n)
{
return ( n<=2 ? 1 : fibonacci(n-1) + fibonacci(n-2) );
}
int main(void)
{
for (int n=1; n<=16; n++)
std::cout << fibonacci(n) << ", ";
std::cout << "..." << std::endl;
return 0;
}
CamelCase:
Example for versions Borland C++ Builder 6, Microsoft Visual C++ 9 (2008), g++ 3.4.5This example is based on character-by-character string processing.
getline
reads a string (delimited with end of line) from argument stream. Function tolower
works only with single characters, so to convert whole string to lower case it is used with transform
function. The latter applies tolower
to all elements in the range [text.begin(), text.end())
and stores the results in a range starting with text.begin()
again.
After this the string is processed char-by-char. Each character is checked for being alphabetic; if it is, it is appended to the resulting string (converted to upper case if previous character was non-alphabetic); if it is not, it only affects lastSpace
(which is true only if last character was non-alphabetic).
isalpha
works with both uppercase and lowercase letters, so it was possible not to convert the input string to lowercase, but rather to convert each appended character.
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
string text, cc="";
bool lastSpace = true;
getline(cin, text);
transform(text.begin(), text.end(), text.begin(), (int (*)(int))tolower);
for (int i=0; i<text.size(); i++)
if (isalpha(text[i])) {
if (lastSpace)
cc += toupper(text[i]);
else
cc += text[i];
lastSpace = false;
}
else {
lastSpace = true;
}
cout << cc << endl;
return 0;
}
Quadratic equation:
Example for versions Borland C++ Builder 6, Microsoft Visual C++ 9 (2008)This example uses a template class complex<>
, provided in STL. All calculations are done in complex numbers, because this allows not to worry about the sign of discriminant and representation of the roots.
Operator >>
of complex
is overloaded so that it can recognize several formats of the number, so the input constants are read not as integers but as complex numbers without imaginary part. This implementation allows to solve quadratic equations not only with integer coefficients but also with floating-point and even complex ones.
Operator <<
is also overloaded to print the number x
as (x.real(),x.imag())
, so to print roots without imaginary part as a single double, function print
was created.
#include <iostream>
#include <complex>
#include <cmath>
using namespace std;
void print(int ind, complex<double> x)
{ cout << "x" << ind << " = ";
if (abs(x.imag()) < 1E-6)
cout << x.real() << endl;
else cout << x << endl;
}
int main()
{ complex<double> A, B, C, D;
cout << "A = ";
cin >> A;
if (abs(A)<1E-3)
{ cout << "Not a quadratic equation" << endl;
return 1;
}
cout << "B = ";
cin >> B;
cout << "C = ";
cin >> C;
A *= 2;
D = B*B-A*C*2.0;
if (abs(D)<1E-3)
cout << "x = " << (-B/A).real();
else
{ print(1, (-B+sqrt(D))/A);
print(2, (-B-sqrt(D))/A);
}
return 0;
}
Quadratic equation:
Example for versions Borland C++ Builder 6, Microsoft Visual C++ 9 (2008), g++ 3.4.5, gcc 3.4.5, gcc 3.4.5 (Objective-C), gcc 4.2.4, tcc 0.9.25This example works both for C and C++, as well as for Objective-C which is superset of C.
#include <math.h>
#include <stdio.h>
int main()
{
int A, B, C;
double D;
printf("A = ");
scanf("%d", &A);
if (A == 0) {
printf("Not a quadratic equation.\n");
return 0;
}
printf("B = ");
scanf("%d", &B);
printf("C = ");
scanf("%d", &C);
D = B * B - 4 * A * C;
if (D == 0) {
printf("x = %f\n", -B / 2.0 / A);
return 0;
}
if (D > 0) {
printf("x1 = %f\nx2 = %f\n",
(-B + sqrt(D)) / 2.0 / A, (-B - sqrt(D))/ 2.0 / A);
} else {
printf("x1 = (%f, %f)\nx2 = (%f, %f)\n",
-B / 2.0 / A, sqrt(-D) / 2.0 / A, -B / 2.0 / A, -sqrt(-D) / 2.0 /A);
}
return 0;
}
Hello, World!:
Example for versions Borland C++ Builder 6, Turbo C++ 1.01, g++ 3.4.5, gcc 3.4.5, gcc 3.4.5 (Objective-C), gcc 4.2.4, tcc 0.9.25#include <stdio.h>
int main()
{
printf("Hello, World!\n");
return 0;
}
Comments
]]>blog comments powered by Disqus
]]>