C++

**C++** adolah sabuah bahasa pemrograman tingkat tinggi nan umum nan diciptakan dek ahli komputer asal Denmark, Bjarne Stroustrup. C++ paraluang dipublikasikan tahun 1985 sabagai perpanjangan dari bahasa C, jo manambahkan fitur berorientasi objek (OOP). Sabalunyo, bahasa ko baranak jo banyak fitur baru—pada C++98 (standarisasi ), C++ manambahkan fitur fungsional disampiang fasilitas tingkat randah untuk manipulasi memori pada sistem sabagai mikrokomputer atau untuak manciptokan sistem operasi saperti Linux jo Windows. Di kemudian hari, muncul pulok fitur pemrograman generik (malalui template). Biasanyo C++ dilakokan sabagai bahasa terkompilasi, jo banyak panyediannyo kompiler C++, di antaro nyo Free Software Foundation, LLVM, Microsoft, Intel, Embarcadero, Oracle, jo IBM.

C++ dirancang untuak pemrograman sistem jo perangkat lunak tertanam pada sistem nan sumberdayonyo terbatas jo skala gadang, jo menekankan kinerja, efisiensi, jo keluwesan pamakaian sabagai hal utama desainnyo. C++ jugo dimanfaatan dalam banyak konteks lain, kekuatan utamo nyo ado pada infrastruktur perangkat lunak jo aplikasi nan sumberdayo terbatas, termasuk aplikasi desktop, permainan video, server (contohnyo e-commerce, mesin pencari web, atau basis data), jo aplikasi nan kritis kinerja (contohnyo sentral telepon atau wahana antariksa).

C++ distandarisasi dek Organisasi Internasional untuk Standardisasi (ISO), jo versi standar tarbaru disahkan ISO pada Oktober 2024 sabagai *ISO/IEC 14882:2024* (nan secara informal disebut C++23). Bahasa C++ paraluang distandarisasi tahun 1998 sabagai *ISO/IEC 14882:1998*, nan kemudian diubah jo C++03, C++11, C++14, C++17, jo C++20. Standar  kini manambahkan fitur baru jo memperluas pustaka standar. Sabalunyo distandarisasi, C++ dikembangakan dek Stroustrup di Bell Labs sabanjak 1979 sabagai perpanjangan bahasa C; ia maingin bahasa nan efisien jo fleksibel saperti C, tapi juo manyadiokan fitur tingkat tinggi untuak organisasi program. Sejak 2012, C++ menganut jadwal rilis tigo tahun sakali jo C++26 disabuik sabagai standar nan direncanokan salanjunyo.

## Sejarah

Pada tahun 1979, Bjarne Stroustrup, seorang ilmuwan komputer asal Denmark, mulai mengembangkan "", cikal bakal C++. Motivasi nan muncul berasal dari pengalaman Stroustrup waktu ngerjain disertasinya. Stroustrup mendapati bahwa Simula punyo fitur nan bermanfaat untuak pengembangan software nan besar, tapi lambat dipakai secara praktis, sedangkan BCPL cepat tapi terlalu dasar untuak software besar. Waktu Stroustrup bekerja di AT&T Bell Labs, ia menghadapi masalah menganalisis UNIX kernel terkait distributed computing. Mengingat pengalaman PhD-nya, Stroustrup berusaha memperkaya bahasa C jo fitur ala Simula.

Awalnya, "C jo Kelas" nan dikembangkan Stroustrup menambah fitur di compiler C, Cpre, termasuk kelas, derived classes, pengetikan kuat, inlining, jo default arguments.

Pada 1982, Stroustrup mulai mengembangkan penerus C jo Kelas nan dinamakan "C++" (
```c++
++
```
 nan artinya increment operator di C) setelah melewati beberapa nama lain. Fitur baru ditambah, termasuk virtual functions, fungsi dan operator overloading, referensi, konstanta, alokasi memori bebas aman (new/delete), pengecekan tipe lebih baik, jo komentar gaya BCPL pakai dua garis miring (
```c++
//
```
). Stroustrup jg bikin compiler mandiri untuk C++, Cfront.

Pada 1984, Stroustrup membuat pustaka input/output stream pertama. Ide operator output diganti dari fungsi output dinamai datang dari Doug McIlroy.

Pada 1985, edisi pertama *[[The C++ Programming Language]]* dirilis, nan menjadi referensi utama, karano belum ado standar resmi. Implementasi komersial pertama C++ dirilis Oktober tahun itu juga.

Pada 1989, C++ 2.0 dirilis, disusul edisi kedua *The C++ Programming Language* pada 1991. Fitur baru di 2.0 termasuk multiple inheritance, abstract classes, static member functions, const member functions, dan protected members. Pada 1990, *The Annotated C++ Reference Manual* diterbitkan. Ngaro jadi dasar standar berikut. Tambahan fitur lain termasuk template, exceptions, namespaces, cast baru, dan Boolean type.

Pada 1998, C++98 dirilis, menstandarkan bahasa, jo pembaruan minor (C++03) dirilis 2003.

Setelah C++98, perkembangan C++ lambat hingga 2011, saat C++11 dirilis, menambah fitur baru jo pustaka standar. Update minor  muncul Desember 2014, diikuti tambahan baru di C++17. Draft C++20 disetujui 4 September 2020, diterbitkan resmi 15 Desember 2020.

Pada 3 Januari 2018, Stroustrup diumumkan sebagai pemenang Charles Stark Draper Prize 2018, "karano konsepsi jo pengembangan bahasa C++".

Desember 2022, C++ nang ranking ketigo di TIOBE index, ngalahin Java untuk pertama kali. , bahasa ini nang ranking kedua saing jo Python, Java ketigo.

Maret 2025, Stroustrup minta komunitas pertahankan bahasa ini, karano manual memory management bisa menyebabkan bug nan jadi risiko keamanan, seperti buffer overflow.

### Etimologi
Menurut Stroustrup, "nama ini menandakan evolusi dari C." Nama ini dikreditkan ka Rick Mascitti (pertengahan 1983) dan pertama kali dipakai Desember 1983. Saat ditanya informal 1992, Mascitti bilang nama ini dibuat dengan semangat tongue-in-cheek. Nama datang dari operator 
```c++
++
```
 C (nan meningkatkan nilai sebuah variabel) jo konvensi pake "+" untuk program nan ditingkatkan.

Sewaktu pengembangan, bahasa ini dikenal sebagai "C baru" dan "C jo Kelas" sebelum mendapat nama resmi.

### Filosofi
Sepanjang hidup C++, pengembangan dipandu prinsip:
* Harus berdasarkan masalah nyata dan fitur langsung berguna di program riil.
* Setiap fitur harus bisa diimplementasikan (dengan cara jelas).
* Programmer bebas pilih gaya programming dan itu harus didukung C++.
* Mengizinkan fitur berguna lebih penting daripada mencegah setiap kemungkinan salah pakai C++.
* Harus menyediakan fasilitas untuk mengorganisir program menjadi bagian terpisah, dan menggabungkan bagian yang dikembangkan berbeda.
* Tidak boleh ada pelanggaran implisit sistem tipe (tapi izinkan pelanggaran eksplisit oleh programmer).
* Tipe dibuat user harus punya performa sama seperti tipe bawaan.
* Fitur tidak dipakai tidak boleh mengganggu performa executable.
* Tidak ada bahasa di bawah C++ (kecuali assembly language).
* C++ harus bisa bekerja bersama bahasa lain, bukan membuat lingkungan terpisah incompatible.
* Jika maksud programmer tidak jelas, izinkan kontrol manual.

### Standarisasi

C++ distandarkan oleh ISO working group WG21, nan rapat tiga kali setahun. Sampai sekarang, tujuh revisi standar diterbitkan, dan sedang mengembangkan C++26.

  

Pada 1998, ISO standard pertama diterbitkan *ISO/IEC 14882:1998*, informalnya *C++98*. Pada 2003, versi baru diterbitkan *ISO/IEC 14882:2003*, memperbaiki masalah C++98.  

Revisi besar berikutnya informal disebut "C++0x", dirilis 2011.  C++11 (14882:2011) manyo tambahannyo ka baso intinyo jo pustaka standar. C++11 (14882:2011) menambah banyak fitur inti dan pustaka standar.

2014, C++14 (C++1y) dirilis sebagai ekstensi kecil C++11, memperbaiki bug dan sedikit peningkatan.Tahun 2014, C++14 (nan juo dikanali sabagai C++1y) diriliskan sabagai tambahan kecil untuak C++11, utamo-utama manyo perbaikan bug jo paningkatan kecil.  Prosedur pemungutan suara Draf Standar Internasional tamam di pertengahan Agustus 2014.

Setelah C++14, revisi besar C++17 (C++1z) diselesaikan oleh ISO pertengahan Juli 2017, diterbitkan Desember 2017.

ISO juga menerbitkan laporan teknis & spesifikasi tambahan, misal:  
* ISO/IEC TR 18015:2006 – pemakaian C++ di embedded system, performa fitur  
* ISO/IEC TR 19768:2007 – ekstensi pustaka, masuk ke C++11  
* ISO/IEC TR 29124:2010 – fungsi matematika khusus, masuk C++17  
* ISO/IEC TR 24733:2011 – aritmatika floating-point desimal  
* ISO/IEC TS 18822:2015 – filesystem standar, masuk C++17  
* ISO/IEC TS 19570:2015 – algoritma pustaka paralel, masuk C++17  
* ISO/IEC TS 19841:2015 – transactional memory  
* ISO/IEC TS 19568:2015 – ekstensi pustaka baru, masuk C++17  
* ISO/IEC TS 19217:2015 – konsep C++, masuk C++20  
* ISO/IEC TS 19571:2016 – pustaka concurrency, masuk C++20  
* ISO/IEC TS 19568:2017 – ekstensi pustaka umum  
* ISO/IEC TS 21425:2017 – pustaka ranges, masuk C++20  
* ISO/IEC TS 22277:2017 – coroutines, masuk C++20  
* ISO/IEC TS 19216:2018 – pustaka networking  
* ISO/IEC TS 21544:2018 – modules, masuk C++20  
* ISO/IEC TS 19570:2018 – pustaka paralel  
* ISO/IEC TS 23619:2021 – refleksi (reflection)  
* ISO/IEC TS 9922:2024 – ekstensi concurrency baru  
* ISO/IEC TS 19568:2024 – ekstensi pustaka lain

Teknis spesifikasi lainnya masih dalam pengembangan jo menunggu persetujuan.

## Contoh Program C++
Contoh program sederhana C++ untuak Hello world jo menggunokan pustaka dasar C++ dapek dicaliak di bawah iko:
```cpp
#include <iostream>
using namespace std;
int main(){

string nama_saya ="Panggih Dafa Najmuddin";
string waras_kelas = "11";
Int tinggi_badan = 175;
char golongan_darah = "0";

count<<"string nama_saya :"<<Panggih_dafa<<endl;
count<<"walas_kelas :"<<11<<endl;
count<<"tinggi badan :"<<175<<endl
count<<"golongan darah :"<<AB<<endl;



{
	cout <<"hello world"<<endl;
	return 0;
}
```


## Keterangan
Baris patamo: 
```cpp
#include <iostream.h>
```
Sabagai bagian dari proses kompilator, kompilator dari c++ manjalankan program nan dinamoan preprosesor. Preprosesor ado kemampuan manambahan jo manghapui kode dari sumber. Pado bagian `#include` mambaritahuan preprosesor untuak manyertakan kode dari iostream, berkas iostream barisi deklarasi untuak barbagai fungsi nan dibutuhan dek perangkek luneik, atau *class-class* nan dibutuhan.

Baris kaduo: 
```cpp
int main ()
```
Pernyataan iko mendeklarasiaan fungsi utamo, bahwa suatu program C++ dapek barisi banyak fungsi, nan harus dipunyoi sebuah fungsi utamo (main function). Fungsi adolah modul nan barisi kode-kode untuak manyalasaian masalah-masalah tatentu. Kato Void manandoan fungsi main indak batipe.

Baris katigo: 
```cpp
{
```
Kurung kurawa buka manandoan awal program.

Baris kaampek: 
```cpp
std::cout << "Hello world\n";
```

Cout adolah sabuah object dari pustaka perangkek luneik standar C++ nan digunoan untuak mancetak string ka piranti output standar, nan biasonyo adolah layar komputer, kompilator manghubungkan kode dari pustaka perangkek luneik standar tu jo kode nan alah ditulih untuak mandapekan hasil executable. Tanda 
```cpp
\n
```
 adolah format modifier nan digunoan untuak baganti baris setelah manampilkan string, jiko ado cout lain pado program tasabuik, mako string nan manyertainyo akan dituliskan pado baris bawahnyo.

Baris kalimo: 
```cpp
# include <stdio.h>

int maksimum (int,int);
void tulis (int);

main()
int nilai 1,nilai 2,nilai maks;
printf (*\n ketikkan dua bilangan bulat:);
scanf("%d%d",& nilai 1,nilai 2);

nilai maks=maksimum (nilai 1,nilai 2);
tulis(nilai maks);
returns 0;

int maksimum(int x1,int x2)
if (x1>x2)
return x1;
else
return x2;

void tulis(int x)
printf("\n hasilnya adalah:%d",x);
```
Kurung kurawa tutuik manandoan akhir program.

## Kato nan dipasan

### Kalompok patamo
C++ mampunyoi 32 buah kato nan dipasan (*reserved words*). Kato kunci kalompok patamo marupokan turunan dari bahasa C, di antaronyo:

### Kalompok kaduo
Kato nan dipasan kalompok kaduo bajumlah 30. Kato-kato iko adolah baru jo hanyo ado di bahasa C++.

Kato-kato nan dipasan tasabuik di ateh indak buliah dipakai sabagai namo variable, class, enum, macro, jo struct.
```cpp
# include <stdio.h>

int maksimum (int,int);
void tulis (int);

main()
int nilai 1,nilai 2,nilai maks;
printf (*\n ketikkan dua bilangan bulat:);
scanf("%d%d",& nilai 1,nilai 2);

nilai maks=maksimum (nilai 1,nilai 2);
tulis(nilai maks);
returns 0;

int maksimum(int x1,int x2)
if (x1>x2)
return x1;
else
return x2;

void tulis(int x)
printf("\n hasilnya adalah:%d",x);
```


## Tipe data dasa
Untuak manyimpan suatu variabel diparaluan tampek khusus di dalam memori komputer. Gadang jo tipe dari variabel-variabel di dalam standar program C++ dispesifikasian sabagai barikuik.

## Kompilator C++

* Acorn C/C++
* Borland C++
* C++/CX
* C++Builder
* Cfront
* Clang
* CodeWarrior
* Comeau C/C++
* ConceptGCC
* Digital Mars
* GNU Compiler Collection
* HP aC++
* IBM XL C++
* Intel C++ Compiler
* MinGW
* Norcroft C compiler
* Open64
* Oracle Solaris Studio
* PathScale
* The Portland Group
* ROSE (compiler framework)
* Shed Skin
* Softune
* TenDRA Compiler
* THINK C
* Turbo C++
* Visual C++
* IBM VisualAge
* Watcom C/C++ compiler
* Zortech

## Kaluargo bahaso pemrograman C++

* Algorithmic skeleton
* C++/CLI
* C++/CX
* Charm++
* Embedded C++
* Felix (programming language)
* Intel Array Building Blocks
* Intel Parallel Studio
* Managed Extensions for C++
* R++
* Sieve C++ Parallel Programming System
* Threading Building Blocks
* ΜC++

## Rujuakan