Penjelasan Data Structure struct
Data Structures struct
adalah salah satu fitur bahasa pemrograman C/C++, merupakan keyword yang memungkinkan kita untuk membuat sebuah deklarasi untuk membuat pengelompokan variabel dengan tipe data yang berbeda.
Cara mendeklarasi Struct
struct
merupakan keyword yang memungkinkan membuat deklarasi yang di dalamnya dapat terdapat banyak variabel, hasil deklarasi ini akan menghasilkan user-defined data type yaitu tipe structure yang berguna untuk mendirikan object.
bentuk penulisan
struct nama_struct{ /*macam-macam deklarasi variabel *… */ }nama_object;
Keterangan
nama_struct
: merupakan identitas dari struct tersebut.
{ …variabel… }
: merupakan sepasang block, tempat dimana semua variabel dikelompokan sebagai member dari struct tersebut. pembuatan variabel di dalam struct sama sekali tidak ada perbedaan dengan mendirikan variabel biasa.
nama_object
: merupakan deklarasi yang menggunakan struct tersebut menjadi tipe data dari deklarasi tersebut. kita dapat mendirikan banyak object di tempat tersebut, masing-masing dipisahkan dengan tanda koma ,
. Object selalu diletakan setelah penutup block dan sebelum semicolon ;
.
Penggunaan dari nama_struct dan nama_object merupakan opsional, kita bisa mendirikan tanpa hal tersebut, tapi kita tidak bisa mengabaikan keduanya. Dan masing-masing tindakan akan membuat struct memiliki sifat yang berbeda.
Jika kita mendirikan struct tanpa menggunakan nama_struct, maka kita diharuskan menggunakan object. Jika tindakan ini dilakukan maka akan membuat struct tidak bisa di pakai di luar deklarasi struct (kita tidak bisa mendirikan object diluar struct tersebut). biasanya tindakan ini digunakan untuk membuat sebuah struct yang tidak di anjurkan untuk digunakan (agar tidak terjadi pembuatan object di luar deklarasi struct).
Contoh penulisan
struct{ int no_induk ; std::string nama; float nilai ; }budi;
Dan pembuatan object sendiri itu opsional, kita dapat mendirikan di dalam deklarasi struct atau di luar struct.
Contoh Penulisan
struct siswa{ int no_induk ; std::string nama; float nilai ; }; siswa budi;
Penjelasan Object
Struct sebenarnya hanyalah deklarasi untuk membuat sebuah tipe data baru yang didirikan oleh programmer sebagai data structure. Data structure tersebut akan digunakan sebagai pembuatan object, pembuatan object itu dapat dilakukan didalam deklarasi struct atau diluar deklarasi struct.
Pembuaan object sendiri sama seperti pembuatan variabel seperti biasanya, yang berbeda hanya kita menggunakan tipe structure sebagai tipe datanya.
Contoh Program :
#include <iostream> #include <string> using namespace std; int main(){ struct siswa{ int no_induk ; string nama; float nilai ; }adi, bambang; //deklarasi object di dalam deklarasi struct siswa budi, tono; //deklarasi object di luar struct return 0; }
Pada contoh di atas, semua deklarasi object masing-masing akan memiliki isi dari tipe structure tersebut.
Cara Mengakses Member dari Struct
Member adalah variabel yang didirikan di dalam struct, dijadikan sebagai satu bagian dari struct.
struct siswa{ string nama; //member float nilai ; //member }
Kita tidak bisa menggunakan member-member dari struct sebelum didirikan object yang didirikan menggunakan data structure tersebut. karena struct hanyalah sebuah rancangan dari tipe structure.
Setelah kita berhasil membuat sebuah deklarasi object. untuk mengakses member struct dari object tersebut kita membutuhkan Member Access Operator .
di antara nama object dan nama anggota variabel struct.
Contoh penulisan
budi.noInduk riski.nama adi.nilaiUjian
Contoh Proram
#include <iostream> #include <string> using namespace std; struct siswa{ int no_induk ; string nama; float nilai ; }; int main(){ siswa budi, tono; //deklarasi object di luar struct budi.no_induk = 1; budi.nama = "Budi Januar"; budi.nilai = 75.5; tono.no_induk = 2; tono.nama = "Tono Laksono"; tono.nilai = 89.9; cout<<budi.nama<<" mendapatkan nilai "<<budi.nilai<<endl; cout<<tono.nama<<" mendapatkan nilai "<<tono.nilai<<endl; return 0; }
Cara Inisialisasi object
Inisialisasi adalah suatu tindakan untuk memberikan nilai awal pada suatu variabel. pada object kita dimungkinkan untuk memberikan nilai awal dengan beberapa cara yaitu, non-static member initialization, initializer list, dan uniform initialization.
Non-static Member adalah suatu tindakan memberikan nilai awal member structure kepada object dengan cara memberikan nilai di saat mendirikan member dari struct.
Dengan cara tersebut, nilai inisialisasi akan berlaku ke semua object yang menggunakan tipe structure tersebut.
Contoh penulisan
struct siswa{ int no_induk = 0; string nama = “ ”; float nilai = 0; };
Contoh Program
#include <iostream> #include <string> using namespace std; struct siswa{ int no_induk = 0; string nama = "kosong"; float nilai = 0; }; int main(){ siswa budi, tono; cout<<budi.nama<<" mendapatkan nilai "<<budi.nilai<<endl; cout<<tono.nama<<" mendapatkan nilai "<<tono.nilai<<endl; return 0; }
Initializer List adalah cara inisialisasi dengan memberikan nilai awal disaat mendirikan object, nilai tersebut hanya akan berlaku pada object itu sendiri.
Contoh penulisan
struct siswa budi = {20103,Budi Kanjeng Berbudi,8.75};
Uniform Initialization merupakan inisialisasi yang masih sama seperti initializer list, hanya saja tidak menggunakan tanda =
. Dan cara ini berasal dari C++11.
Contoh penulisan
siswa tono {1, “Tono Ono Loro”, 9,85};
Contoh program
#include <iostream> #include <string> using namespace std; struct siswa{ int no_induk; string nama; float nilai; }; int main(){ siswa budi={1, "Budi Januar", 75.5}; //Initializer List siswa tono{2,"Tono Laksono", 89.9}; //Uniform Initialization cout<<budi.nama<<" mendapatkan nilai "<<budi.nilai<<endl; cout<<tono.nama<<" mendapatkan nilai "<<tono.nilai<<endl; return 0; }
Pada initializer list dan uniform initialization kita dimungkinkan untuk tidak memberikan nilai awal pada salah satu member struct dari object. Peraturan tersebut sama seperti peraturan pada pemberian argument pada function parameter, kita hanya bisa untuk tidak memberi nilai awal ke pada member yang paling bawah/kanan.
Pada C++11 kita tidak dimungkinkan untuk melakukan dua metode inisialisasi. Non-static initialization dengan initializer list/uniform initialization. Hal tersebut akan membuat kompilator mengeluh.
Tapi setelah C++14, kita dimungkinkan untuk menggunakan dua cara inisialisasi secara bersamaan.
Besar Memori dari Struct
Deklarasi struct sama sekali tidak memakan memori, struct bisa dikatakan hanyalah sebuah rancangan, deklarasi struct dibuat untuk membuat tipe data yang dibuat oleh programmer.
Yang memakan memori adalah Object yang didirikan menggunakan data structure sebagai tipe datanya. Jumlah memori dari object akan memiliki besar dari total besar memori member yang ada pada struct tersebut.
Contoh Program
#include <iostream> #include <string> using namespace std; struct siswa{ int no_induk; string nama; double nilai; }; int main(){ siswa tono; cout<<"tono.no_induk = "<<sizeof(tono.no_induk)<<endl; cout<<"tono.nama = "<<sizeof(tono.nama)<<endl; cout<<"tono.nilai = "<<sizeof(tono.nilai)<<endl; cout<<"Total = "<<sizeof(tono)<<endl; return 0; }
Tapi terkadang besar dari object akan sedikit lebih besar dari yang kita perkirakan, hal tersebut disebut sebagai Padding yang dilakukan oleh kompilator dengan menambahkan sedikit memori kepada struct tersebut.
terbaik penjelasannya mudah dimengerti