Bahasa C++ diciptakan oleh Bjarne Stroustrup di AT&T Bell Laboratories pada awal 1980an sebagai pengembangan dari bahasa C. Pada mulanya bahasa ini dikenal sebagai "C with Classes" (nama C++ digunakan sejak 1983, setelah diusulkan oleh Rick Mascitti). Pada tahun 1985 bahasa ini mulai disebarluaskan oleh AT&T dengan mengeluarkan perangkat lunak cfront yang berfungsi sebagai C++ translator (cfront menerima masukan program bahasa C++ dan menghasilkan kode bahasa C). Perancangan bahasa C++ didasarkan pada bahasa C, Simula67, Algol68, dan Ada. Sebagai contoh, konsep \class" diambil dari bahasa Simula67, konsep operator overloading dan kemungkinan penempatan deklarasi di antara instruksi diambil dari bahasa Algol68, konsep template dan exception diambil dari bahasa Ada. Bahasa C++ memperluas kemampuan bahasa C dalam beberapa hal yaitu:
(1) memberikan dukungan untuk menciptakan dan memanfaatkan abstraksi data,
(2) memberikan dukungan untuk object-oriented programming, dan
(3) memperbaiki beberapa kemampuanyang sudah ada pada bahasa C.
Upaya pembakuan terhadap bahasa C++ sudah dilakukan sejak beberapa tahun terakhir dan pada bulan Oktober/November 1998, ANSI telah mengeluarkan standard untuk bahasa C++.
Perbandingan C++ dengan C
Komentar
Komentar di dalam C++ dapat juga dituliskan setelah simbol //. Jika komentar yang dituliskan di antara /* dan */ bersifat block-oriented, komentar yang dituliskan setelah tanda // bersifat line-oriented.
Masukan dan Keluaran
Dalam bahasa C, penulis program biasanya menggunakan perintah scanf() atau printf() untuk keperluan operasi keluaran/masukan dari stream. Bahasa C++ memiliki operasi masukan/keluaran melalui objek cin, cout, dan cerr sebagai pasangan dari stdin, stdout, dan stderr
Deklarasi variable
Selain di awal blok, variable/objek dapat dideklarasikan/ didefinisikan di antara instruksi. Dalam bahasa C, deklarasi variabel harus selalu dilakukan di luar atau di awal blok.
CODE
void main()
{
int x = 1; // contoh baris komentar pertama
// contoh baris komentar kedua
printf("x = %d\n",x);
float r; // didefinisikan di antara instruksi
r = 5.0;
}
Perubahan Tipe
Perubahan tipe (typecasting) dalam C++ dapat dipandang sebagai pemanggilan fungsi dengan nama tipe yang digunakan dalam casting.
Reference
Dalam hal pengelolaan variabel dan parameter, C++ juga menyediakan reference variable, dan call by reference. Reference ke suatu variabel adalah nama alias terhadap variabel tersebut. Reference berbeda dengan pointer. Jika sudah digunakan untuk mengacu suatu objek/variabel, reference tidak dapat direset untuk mengacu objek/variabel lain. Fasilitas
ini dapat dimanfaatkan untuk memberikan alias terhadap suatu variabel yang mempunyai nama yang panjang (misalnya karena berada dalam struktur yang berlapis-lapis).
CODE
int x = 5;
int &xr = x; // xr mengacu pada x
xr++; // xr merupakan alias dari x
Penggunaan reference yang lain adalah untuk call by reference dan return value dari sebuah fungsi. Dengan demikian, dalam bahasa C++ simbol & digunakan dengan dua makna, yaitu sebagai address-of dan reference. Setiap pendefinisian variabel referensi harus selalu diinisialisasi oleh variabel lain. Dalam contoh di atas, variabel xr tidak berisi alamat dari x, seperti halnya pada
CODE
int *py;
int &yr; // error (tidak diinisialisasi)
int y;
py = &y; // py akan berisi alamat dari y
Function Overloading
Nama fungsi yang sama dapat dideklarasikan dengan function signature yang berbeda. Fasilitas ini sering disebut sebagai function name overloading. Function signature adalah jumlah dan tipe parameter formal sebuah fungsi.
Dalam C++, pemanggilan fungsi tidak hanya ditentukan oleh nama fungsi, tetapi juga oleh jenis dan banyaknya parameter aktual. Fasilitas yang berkaitan dengan fungsi yang ada di C++ lainnya adalah template function, operator function, inline function.
Nilai default parameter formal
Dalam C++ parameter formal dapat diberi nilai default. Dalam Contoh dibawah ditunjukkan fungsi MoveWindow() yang memiliki 3 parameter formal, dua di antaranya diberi nilai default. Pemanggilan MoveWindow() (seperti pada baris 13 dan 14) dapat dilakukan dengan memberikan satu, dua, atau tiga parameter aktual.
CODE
//Function overloading
1 void swap(int &x, int &y) { /* swap integer */
2 int tmp;
3
4 tmp = x;
5 x = y;
6 y = tmp;
7 }
8
9 void swap(float &x, float &y) { /* swap float */
10 float tmp;
11
12 tmp = x;
13 x = y;
14 y = tmp;
15 }
16
17 void main() {
18 int x=5, y=10;
19 float v=5.3, w=4.2;
20
21 swap(x,y); // otomatis memanggil swap integer
22 swap(v,w); // memanggil swap float
23 }