Latar Belakang

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 }

Operator-operator Baru
C++ juga mende nisikan beberapa operator baru seperti global scope ( unary :: ), class scope ( binary :: ), new, delete, member pointer selectors ( ->*, .* ) dan kata kunci baru seperti:
class, private, operator, dsb.
Operator scope digunakan untuk menegaskan ruang lingkup dari sebuah nama. Pada Contoh dibawah ini ditunjukkan beberapa cara menggunakan operator ini di dalam fungsi Print().

CODE
1 int x;
2 class List
3 {
4 int x;
5 List *next;
6 public:
7 void Print()
8 {
9 int x;
10
11 x = 5; // local (baris 9)
12 List::x = 10; // anggota data (baris 4)
13 ::x = 23; // global (baris 1)
14 }
15 };

Tag name
Nama kelas atau enumerasi (tag name) adalah nama tipe (baru)

CODE
enum TOption {OP_READ, OP_WRITE, OP_CREATE};
TOption file_op; // dalam \C++: `TOption’ otomatis menjadi nama tipe
enum TOption file_op; // dalam C

Anonymous union
Nama tag sebuah union dapat dihilangkan.

CODE
struct Ident {
char *nama;
char type;
union /* tanpa tagname */ { /* anonymous union */
char *str_value;
int int_val;
};
};
struct Ident r;
r.int_val = 0;

Kompatibilitas antara C++ dan C
Program yang dituliskan dalam bahasa C seharusnya dapat dikompilasi oleh kompilator C++. Namun demikian, ada beberapa hal yang harus diperhatikan

  • Program tidak dapat menggunakan kata kunci dari C++ sebagai nama identifier
  • Dalam C++ deklarasi fungsi “f()” berarti bahwa, f tidak memiliki parameter formal satupun, dalam C ini berarti bahwa f dapat menerima parameter dari jenis apapun
  • Dalam C++, tipe dari konstanta karakter adalah char, sedangkan dalam C, tipe tersebut adalah int. Akibatnya sizeof(`a’) memberikan nilai 1 di C++ dan 4 di C pada mesin yang memiliki representasi integer 4 byte.
  • Setiap fungsi harus dideklarasikan (harus memiliki prototype)
  • Fungsi yang bukan bertipe void, harus memiliki instruksi return
  • Penanganan inisialisasi array karakter:
    CODE
    char ch[3] = “\C++”; /* C: OK, \C++: error */
    char ch[] = “\C++”; /* OK untuk C dan \C++ *

Saran untuk C programmers

  • Hindarilah penggunaan (#define) dalam program C++ seperti untuk mendefinisikan konstanta seperti pada #define MAXBUFF 1500. Gunakanlah const untuk mendefinisikan konstanta
  • Gunakan inline untuk menghindari function-calling overhead
  • Deklarasikan setiap fungsi (procedure) dan spesi kasikan semua tipe parameter formalnya
  • Jangan gunakan malloc() maupun free(). Sebagi gantinya, gunakanlah new dan delete. Kedua operator baru ini tidak hanya sekedar mengalokasikan memori melainkan juga secara otomatis melibatkan constructor dan destructor.
  • Union pada umumnya tidak memerlukan tag name, gunakanlah anonymous union
to be continued.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Logout / Ubah )

Twitter picture

You are commenting using your Twitter account. Logout / Ubah )

Facebook photo

You are commenting using your Facebook account. Logout / Ubah )

Google+ photo

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s