Struktur dan kelas dalam C++
C++ terus menjadi bahasa minoritas untuk pengembangan tertanam tetapi umumnya diadopsi oleh pengembang ketika proyek menjadi terlalu besar untuk C untuk digunakan secara efisien. Pengembang ini biasanya beralih dari C ke C++ dan perbedaan halus antara bahasa merupakan bagian penting dari kurva belajar mereka. C++ memiliki struktur, seperti yang dimiliki C, karena mereka tidak sama. C++ memiliki kelas, yang sangat mirip dengan struktur. Artikel ini membongkar detail elemen bahasa ini.
Struktur dalam C
Struktur dalam C adalah item data komposit (objek) yang disesuaikan, yang dapat dibuat dari tipe data bawaan yang ada (int , char , dll.), bidang bit (bilangan bulat dengan ukuran bit yang ditentukan) dan struktur lainnya. Idenya adalah untuk menggabungkan sejumlah item data yang dimiliki bersama. Misalnya, struktur untuk menampung koordinat 3 dimensi mungkin terlihat seperti ini:
koordinat struktur{ float x; mengapung y; float z;};
Kode ini memberi tahu kompilator apa koordinat struct seperti. Anda kemudian dapat mendeklarasikan variabel jenis ini sebagai berikut:
lokasi koordinat struct;
Variabel lokasi bertipe koordinat struct dan bidang internalnya dapat dialamatkan menggunakan operator “titik”:
location.x =1.0;location.y =2.0;location.z =9.99;
Tentu saja, efek serupa dapat dicapai dengan menggunakan tiga float separate yang terpisah variabel dengan nama seperti location_x dll. Namun, jauh lebih mudah untuk menangani lokasi sebagai variabel tunggal yang dapat diteruskan ke fungsi dll.
Kemampuan untuk memasukkan bidang bit memberikan struktur kemampuan yang tidak tersedia di tempat lain di C. Berikut ini contohnya:
struct bitreg{ tidak mendaftar:3; tidak ditandatangani:3; polaritas yang tidak ditandatangani:2;};
Setiap bidang dalam variabel bertipe struct bitreg memiliki ukuran bit tertentu. Complier memastikan bahwa data disimpan dengan cara yang masuk akal, jadi kami mengharapkan variabel seperti itu masuk ke dalam satu byte. Selanjutnya, semua kode "bit bashing" untuk mengakses bidang dalam byte dihasilkan secara otomatis. Jadi, programmer cukup mengaksesnya sebagai berikut:
struktur kontrol bitreg; control.up =1;control.down =2;control.polarity =3;
Untuk sebagian besar, menggunakan struktur dalam C cukup mudah dan membuat kode lebih mudah dipahami tanpa berdampak pada efisiensi eksekusi. Namun, ada dua hal yang harus diperhatikan oleh pengembang tersemat:
- Prosesor modern kelas atas (biasanya 32-bit) memiliki set instruksi yang siap mengakomodasi penggunaan struktur. Memang, mereka dirancang untuk melakukan hal ini. Namun, sebagian besar CPU kelas bawah tidak menawarkan efisiensi seperti itu, sehingga penggunaan struktur perlu diperhatikan.
- Bidang bit adalah fitur yang bagus dan dapat menghasilkan kode yang efisien dan dapat dibaca. Pengembang tertanam dapat segera melihat peluang:gunakan bidang bit untuk mengakses register kontrol perangkat. Banyak perangkat periferal memiliki register dengan lebar 1-word atau 1-byte yang berisi berbagai bidang bit. Ini terlihat seperti pasangan yang hebat dan terkadang bisa dibuat untuk bekerja. Tapi ada dua masalah:
- Tata letak yang tepat dari bidang bit ditentukan oleh kompiler. Jika semuanya dipetakan dengan benar ke perangkat, kodenya mungkin berfungsi dengan baik. Namun, perubahan kompiler, atau bahkan hanya pembaruan kompiler, dapat merusak kode.
- Kode yang dihasilkan oleh kompilator untuk mengakses bidang bit kemungkinan besar akan menggunakan sejumlah operasi DAN/ATAU dan beberapa akses ke register, yang mungkin bermasalah. Selain itu, beberapa register perangkat bersifat hanya-tulis dan tidak akan pernah diakomodasi dalam kode yang dihasilkan oleh kompiler.
Meskipun struktur C terlihat seperti tipe data baru, sebenarnya tidak. Tipe data biasanya memiliki rentang operasi yang dapat dilakukan padanya; ini tidak berlaku untuk struktur C. Untuk melakukan apa pun pada struktur C, selain membuat pointer ke sana, Anda perlu mengakses bidang internal. Masalah ini dibahas dalam C++.
Kelas dalam C++
Bahasa C++ memiliki sejumlah kemampuan berorientasi objek. Salah satunya adalah konsep kelas , yang memungkinkan deskripsi sesuatu yang lebih mirip tipe data baru. Sebuah variabel (biasanya disebut objek ) dapat dicontohkan dari kelas; yaitu objek dari tipe baru ini.
Kelas C++ memiliki sintaks yang hampir sama persis dengan struktur C dan beberapa kemampuan yang sangat mirip. Namun, ada beberapa perbedaan penting:
- Sebuah kelas juga dapat berisi fungsi (disebut metode ).
- Variabel dan metode anggota disembunyikan dari dunia luar, kecuali jika deklarasinya mengikuti publik:
- Mungkin ada sepasang metode khusus – konstruktor dan destruktor – yang dijalankan secara otomatis ketika instance kelas (objek) dibuat dan dimusnahkan masing-masing.
- Operator yang bekerja pada tipe data baru dapat didefinisikan menggunakan metode khusus (fungsi anggota).
- Satu kelas dapat digunakan sebagai dasar untuk definisi kelas lain (ini disebut warisan ).
- Mendeklarasikan variabel tipe baru (instance kelas; objek) hanya memerlukan nama kelas – kata kunci kelas tidak diperlukan.
Sebagian besar fitur ini diilustrasikan dalam contoh ini:
class myclass{ char a; int b;public: void fun(); kelasku(); ~kelasku();}; myclass myobj; myobj.fun();
Variabel anggota a dan b hanya dapat diakses oleh tiga fungsi anggota kesenangan() , kelassaya() dan ~kelasku() . Dua fungsi terakhir adalah konstruktor dan destruktor. Hanya menyenangkan() kemungkinan akan dipanggil dengan kode pengguna. Kode sebenarnya untuk ketiga fungsi akan didefinisikan di tempat lain yang dikaitkan dengan kelas menggunakan :: operator, jadi:
void myclass::fun(){ ...
Struktur dalam C++
Selain kelas, C++ memiliki struktur yang kompatibel dengan C. Namun, struktur C++ juga memiliki kemampuan tambahan yang sama yang dimiliki oleh kelas. Hanya satu perbedaan antara struktur dan kelas di C++. Aksesibilitas default variabel anggota dan fungsi dalam kelas adalah pribadi, seperti yang telah kita lihat; default dalam sebuah struct adalah publik. Dengan demikian, fungsionalitas dari kelas sebelumnya juga dapat diekspresikan seperti ini:
struct mystruct{ void fun(); kelasku(); ~myclass();private: char a; int b;};
Menggunakan kelas dan struktur di C++
Setelah memperoleh informasi ini, Anda disarankan untuk tidak mengeksploitasinya terlalu berat. Ada banyak alasan untuk hanya menggunakan struktur untuk jenis fungsionalitas yang mereka tawarkan di C dan kelas ketika Anda membutuhkan kemampuan ekstra. Terutama, ini adalah masalah keterbacaan kode. Pengembang lain mungkin tidak begitu jelas tentang detailnya dan kode yang ditulis dengan cara "non-standar" akan membingungkan.
Prioritas utama saat Anda menulis kode adalah memastikan kode tersebut dapat dibaca (=dapat dipertahankan). Seseorang – mungkin Anda – mungkin perlu melihat kode ini dalam waktu satu tahun dan memahami fungsinya. Beberapa saran:Asumsikan bahwa orang yang akan menjaga kode Anda adalah seorang psikopat bersenjata, yang memiliki kesabaran terbatas, dan mengetahui alamat rumah Anda.