Struktur bermanfaat untuk mengelompokkan sejumlah data dengan tipe yang berlainan. Apabila suatu struktur telah dideklarasikan, struktur ini dapat dgunakan untuk mendefinisikan suatu variabel. Suatu struktur juga dapat mengandung struktur yang lain dan anggota struktur dapat diakses menggunakan bentuk :
Varibel_struktur.nama_anggota
Contoh program lengkap yang melibatkan pendeklarasian dan pendefinisian variabel struktur dan
juga pengaksesan terhadap anggota variabel struktur dapat dilihat dibawah ini :
Hasil eksekusi :
28/11/1982
Pada program diatas tanda titik diantara nama variabel dan nama anggota menyatakan penugasan untuk memberikan nilai 28 ke anggota tanggal pada variabel struktur tanggal_lahir.
Pemberian nilai terhadap suatu struktur dapat dilakukan dengan bentuk :
var1 = var2;
sepanjang kedua variabel adalah variabel struktur bertipe sama.
Contoh program :
Hasil eksekusi :
28/11/1982
Array struktur
DARI STRUKTUR KE KELAS
Kelas merupakan struktur data dari objek. Perbedaan utama dengan struktur terletak pada kata kunci pendeklarasian yaitu struct untuk struktur dan class untuk kelas. Untuk lebih jelasnya kita bandingkan program berikut ini :
Program struktur StrukturMhs.cpp
Output :
Nim = 123
Nama = Nanang
Alamat = Jogja
Program kelas ClassMhs.cpp
Output :
Nim = 123
Nama = Nanang
Alamat = Jogja
Pendeklarasian Kelas
Bentuk :
Penggunaan Public
Penggunaan kata public pada pendeklarasian kelas menunjukkan bahwa yang ada dibawahnya bisa diakses diluar kelas. Kata kunci pada kelas Mhs diatas disebut dengan penentu akses.
Penggunaan Private
Penentu akses private biasa digunakan dalam kelas untuk memproteksi anggota-anggota tertentu pada kelas, agar tidak dapat diakses diluar kelas secara langsung.
Menambah Fungsi Anggota
Konsep obyek pada C++ sebenarnya digunakan untuk menyatukan data dan fungsi yang mengakses data dalam suatu wadah. Selanjutnya data yang terletak dalam kelas disebut anggota data dan fungsi yang terletak dalam kelas disebut anggota fungsi. Pada pemrograman berorientasi objek data dan fungsi harus dirancang secara bersamaan. Misalkan terdapat data :
Nomor induk mahasiswa
Nama mahasiswa
Alamat mahasiswa Diawal perancangan harus dipikirkan fungsi-fungsi dasar yang digunakan untuk mengakses ketiga data tersebut. Fungsi-fungsi anggota yang dimaksud dapat berupa :
Mengisikan data
Menampilkan data
Kemudian juga perlu direncanakan data atau fungsi mana saja yang boleh diakses diluar obyek dan yang hanya digunakan secara internal oleh obyek itu sendiri. Dalam hal ini penentu akses public atau private yang menetukannya.
Contoh :
Pada program diatas kelas Mhs memiliki tiga buah anggota data (nim, nama, alamat) dan dua buah fungsi anggota (inisialisasi(), info()). Ketiga data anggota dinyatakan private, sehingga tidak dapat diakses diluar kelas. Namun anggota data tersebut dapat diakses oleh kedua fungsi anggota, dan semua fungsi anggota dapat diakses diluar kelas, mengingat dinyatakan dalam public.
Pendefinisian anggota kelas mempunyai aturan seperti halnya fungsi biasa.
Contoh :
void inisialisasi ( int Nim, char *Nama, char *Alamat) { nim = Nim; strcpy(nama,Nama); strcpy(alamat,Alamat); }
fungsi anggota seperti diatas dapat mengenali variabel seperi nim, nama, alamat, yang tidak lain adalah anggota data dari kelas Mhs.
Mendefinisikan Beberapa Obyek Beberapa obyek dengna kelas yang sama dapat didefinisikan sebagimana pendefinisian variabel biasa. Contoh : Mhs data, biodata; Contoh program :
output :
Nim = 123
Nama = Nanang Alamat = Jogja
Nim = 124
Nama = Budi
Alamat = Jakarta
Hasil diatas menunjukkan bahwa data yang terkandung pada masing-masing obyek (data dan biodata) berbeda.
Alternatif Penulisan Fungsi Anggota
Penulisan fungsi anggota ada dua macam, cara pertama seperti diatas, kemudian cara kedua pada kelas hanya terdapat deklarasi fungsi anggota (prototipe) dan definisi fungsi anggota ditempatkan diluar kelas.
Contoh
Nama Parameter dan Anggota Data Sama
Pada contoh pendefinisian fungsi anggota inisisalisasi() pada kelas Mhs
void Mhs::inisialisasi ( int Nim, char *Nama, char *Alamat)
{
nim = Nim; strcpy(nama,Nama);
strcpy(alamat,Alamat);
}
nama parameter (argumen) dan data yang digunakan berbeda (terletak pada huruf awalnya). Hal ini tidak akan menimbulkan kerancuan. Berbeda halnya kalau nama parameter fungsi dan nama anggota data kelas ternyata sama, seperti contoh berikut :
void Mhs::inisialisasi ( int nim, char *nama, char *alamat)
{
nim = nim;
strcpy(nama,nama);
strcpy(alamat,alamat);
}
Pada penulisan diatas kompiler tidak dapat membedakan antara parameter dan anggota data kelas. Tetapi jika kode dikompilasi ternyata kompiler tidak melaporkan adanya kesalahan. Mengapa? Tidak lain adalah dengan sendirinya kompiler menganggap semua data pada fungsi anggota diatas sebagai parameter. Sehingga nama anggota data kelas menjadi tersembunyi. Perlu ditekankan disini, bahwa kalau nama anggota data kelas teryata sama dengan nama parameter, nama anggota data tetap dapat diakses. pengaksessannya dengan menggunakan operator resolusi lingkup (::), dengan format :
nama_kelas::nama_anggota_data;
sehingga fungsi inisialisasi() dapat ditulis :
void Mhs::inisialisasi ( int nim, char *nama, char *alamat) { Mhs::nim = nim; strcpy(Mhs::nama,nama); strcpy(Mhs::alamat,alamat); }
Contoh program :
Varibel_struktur.nama_anggota
Contoh program lengkap yang melibatkan pendeklarasian dan pendefinisian variabel struktur dan
juga pengaksesan terhadap anggota variabel struktur dapat dilihat dibawah ini :
/** * ------------------------------- * Contoh Program * Pendeklarasian dan pendefinisian variabel strukutur * ------------------------------- **/ #include <iostream.h> #include <conio.h> void main() { struct data_tanggal // Pendeklarasian { int tahun; int bulan; int tanggal; }; data_tanggal tanggal_lahir // Pendefinisian struktur // Pengaksesan anggota struktur tanggal_lahir.tangal = 28; tanggal_lahir.bulan = 11; tanggal_lahir.tahun = 1982; cout << tanggal_lahir.tanggal << ‘ / ’ << tanggal_lahir.bulan << ‘/ ’ << tanggal_lahir.tahun << endl; }
Hasil eksekusi :
28/11/1982
Pada program diatas tanda titik diantara nama variabel dan nama anggota menyatakan penugasan untuk memberikan nilai 28 ke anggota tanggal pada variabel struktur tanggal_lahir.
Pemberian nilai terhadap suatu struktur dapat dilakukan dengan bentuk :
var1 = var2;
sepanjang kedua variabel adalah variabel struktur bertipe sama.
Contoh program :
#include <iostream.h> #include <conio.h> void main() { struct data_tanggal // Pendeklarasian { int tahun; int bulan; int tanggal; }; data_tanggal tgl1, tgl2 ; // Pendefinisian struktur // Penugasan per anggota tgl1.tanggal = 28; tgl1.bulan = 11; tgl1.tahun = 1982; // Penugasan antaranggota struktur tgl1 = tgl2; cout << tgl2.tanggal << ‘ / ’ << tgl2.bulan << ‘ / ’ << tgl2.tahun << endl; }
Hasil eksekusi :
28/11/1982
Array struktur
#include <iostream.h> #include <conio.h> void main() { struct mahasiswa { int nim; char nama[30][30]; }; int jml; mahasiswa mhs[25]; <<"Berapa jumlah siswa : "; cin>>jml; for(int i = 0;i < jml; i++) { cout<<"Nim : ";cin>>mhs[i].nim; cout<<"Nama : ";cin>>mhs[i].nama[i]; } for(int i = 0;i < jml; i++) { cout<<"Nim : "<<mhs[i].nim<<endl; cout<<"Nama : "<<mhs[i].nama[i]<<endl; } getch(); }
#include <iostream.h> #include <conio.h> void main() { struct mahasiswa { int nim; char nama[30][1]; int nilai[3]; int tot; }; int jml; mahasiswa mhs[25]; mahasiswa tmp; cout<<"Berapa jumlah siswa : "; cin>>jml; for(int i = 0;i < jml; i++) { mhs[i].tot = 0; cout<<"Nim : ";cin>>mhs[i].nim; cout<<"Nama : ";cin>>mhs[i].nama[i]; for(int j = 0; j<3; j++) { cout<<"Nilai "<<(j+1)<<" : "; cin>>mhs[i].nilai[j]; mhs[i].tot = mhs[i].tot + mhs[i].nilai[j]; } } clrscr(); for(int i = 0;i < jml; i++) { cout<<"Nim : "<<mhs[i].nim<<endl; cout<<"Nama : "<<mhs[i].nama[i]<<endl; cout<<"Total : "<<mhs[i].tot<<endl<<endl;; } getch(); }
DARI STRUKTUR KE KELAS
Kelas merupakan struktur data dari objek. Perbedaan utama dengan struktur terletak pada kata kunci pendeklarasian yaitu struct untuk struktur dan class untuk kelas. Untuk lebih jelasnya kita bandingkan program berikut ini :
Program struktur StrukturMhs.cpp
#include <iostream.h> #include <conio.h> #include <string.h> struct Mhs { int nim; char nama[35]; char alamat[25]; }; void main() { clrscr(); Mhs data; // Pendefinisian variabel data.nim = 123; strcpy(data.nama, "Nanang"); strcpy(data.alamat, "Jogja"); cout <<"Nim = " << data.nim << endl; cout <<"Nama = " << data.nama << endl; cout <<"Alamat = " << data.alamat << endl; getch(); }
Output :
Nim = 123
Nama = Nanang
Alamat = Jogja
Program kelas ClassMhs.cpp
#include <iostream.h> #include <conio.h> #include <string.h> class Mhs { public : int nim; char nama[35]; char alamat[25]; }; void main() { clrscr(); Mhs data; // Pendefinisian obyek data.nim = 123; strcpy(data.nama, "Nanang"); strcpy(data.alamat, "Jogja"); cout <<"Nim = " << data.nim << endl; cout <<"Nama = " << data.nama << endl; cout <<"Alamat = " << data.alamat << endl; getch(); }
Output :
Nim = 123
Nama = Nanang
Alamat = Jogja
Pendeklarasian Kelas
Bentuk :
Penggunaan Public
Penggunaan kata public pada pendeklarasian kelas menunjukkan bahwa yang ada dibawahnya bisa diakses diluar kelas. Kata kunci pada kelas Mhs diatas disebut dengan penentu akses.
Penggunaan Private
Penentu akses private biasa digunakan dalam kelas untuk memproteksi anggota-anggota tertentu pada kelas, agar tidak dapat diakses diluar kelas secara langsung.
Menambah Fungsi Anggota
Konsep obyek pada C++ sebenarnya digunakan untuk menyatukan data dan fungsi yang mengakses data dalam suatu wadah. Selanjutnya data yang terletak dalam kelas disebut anggota data dan fungsi yang terletak dalam kelas disebut anggota fungsi. Pada pemrograman berorientasi objek data dan fungsi harus dirancang secara bersamaan. Misalkan terdapat data :
Nomor induk mahasiswa
Nama mahasiswa
Alamat mahasiswa Diawal perancangan harus dipikirkan fungsi-fungsi dasar yang digunakan untuk mengakses ketiga data tersebut. Fungsi-fungsi anggota yang dimaksud dapat berupa :
Mengisikan data
Menampilkan data
Kemudian juga perlu direncanakan data atau fungsi mana saja yang boleh diakses diluar obyek dan yang hanya digunakan secara internal oleh obyek itu sendiri. Dalam hal ini penentu akses public atau private yang menetukannya.
Contoh :
#include <iostream.h> #include <conio.h> #include <string.h> class Mhs { private : int nim; char nama[35]; char alamat[25]; public : void inisialisasi ( int Nim, char *Nama, char *Alamat) { nim = Nim; strcpy(nama,Nama); strcpy(alamat,Alamat); } void info () { cout <<"Nim = " << nim << endl; cout <<"Nama = " << nama << endl; cout <<"Alamat = " << alamat << endl; } }; void main() //Fungsi utama { clrscr(); Mhs data; // Pendefinisian variabel Data.inisialisasi(123,"Nanang","Jogja"); Data.info(); Getch(); }
Pada program diatas kelas Mhs memiliki tiga buah anggota data (nim, nama, alamat) dan dua buah fungsi anggota (inisialisasi(), info()). Ketiga data anggota dinyatakan private, sehingga tidak dapat diakses diluar kelas. Namun anggota data tersebut dapat diakses oleh kedua fungsi anggota, dan semua fungsi anggota dapat diakses diluar kelas, mengingat dinyatakan dalam public.
Pendefinisian anggota kelas mempunyai aturan seperti halnya fungsi biasa.
Contoh :
void inisialisasi ( int Nim, char *Nama, char *Alamat) { nim = Nim; strcpy(nama,Nama); strcpy(alamat,Alamat); }
fungsi anggota seperti diatas dapat mengenali variabel seperi nim, nama, alamat, yang tidak lain adalah anggota data dari kelas Mhs.
Mendefinisikan Beberapa Obyek Beberapa obyek dengna kelas yang sama dapat didefinisikan sebagimana pendefinisian variabel biasa. Contoh : Mhs data, biodata; Contoh program :
#include <iostream.h> #include <conio.h> #include <string.h> class Mhs { private : int nim; char nama[35]; char alamat[25]; public : void inisialisasi ( int Nim, char *Nama, char *Alamat) { nim = Nim; strcpy(nama,Nama); strcpy(alamat,Alamat); } void info () { cout <<"Nim = " << nim << endl; cout <<"Nama = " << nama << endl; cout <<"Alamat = " << alamat << endl; } }; void main() //Fungsi utama { clrscr(); Mhs data,biodata; // Pendefinisian variabel Data.inisialisasi(123,"Nanang","Jogja"); Biodata.inisialisasi(124,"Budi","Jakarta"); Data.info(); biodata.info(); getch(); }
output :
Nim = 123
Nama = Nanang Alamat = Jogja
Nim = 124
Nama = Budi
Alamat = Jakarta
Hasil diatas menunjukkan bahwa data yang terkandung pada masing-masing obyek (data dan biodata) berbeda.
Alternatif Penulisan Fungsi Anggota
Penulisan fungsi anggota ada dua macam, cara pertama seperti diatas, kemudian cara kedua pada kelas hanya terdapat deklarasi fungsi anggota (prototipe) dan definisi fungsi anggota ditempatkan diluar kelas.
Contoh
#include <iostream.h> #include <conio.h> #include <string.h> class Mhs { private : int nim; char nama[35]; char alamat[25]; public : void inisialisasi ( int Nim, char *Nama, char *Alamat); void info (); }; void Mhs::inisialisasi ( int Nim, char *Nama, char *Alamat) { nim = Nim; strcpy(nama,Nama); strcpy(alamat,Alamat); } void Mhs::info () { cout <<"Nim = " << nim << endl; cout <<"Nama = " << nama << endl; cout <<"Alamat = " << alamat << endl; } void main() //Fungsi utama { clrscr(); Mhs data; // Pendefinisian variabel Data.inisialisasi(123,"Nanang","Jogja"); Data.info(); getch(); }
Nama Parameter dan Anggota Data Sama
Pada contoh pendefinisian fungsi anggota inisisalisasi() pada kelas Mhs
void Mhs::inisialisasi ( int Nim, char *Nama, char *Alamat)
{
nim = Nim; strcpy(nama,Nama);
strcpy(alamat,Alamat);
}
nama parameter (argumen) dan data yang digunakan berbeda (terletak pada huruf awalnya). Hal ini tidak akan menimbulkan kerancuan. Berbeda halnya kalau nama parameter fungsi dan nama anggota data kelas ternyata sama, seperti contoh berikut :
void Mhs::inisialisasi ( int nim, char *nama, char *alamat)
{
nim = nim;
strcpy(nama,nama);
strcpy(alamat,alamat);
}
Pada penulisan diatas kompiler tidak dapat membedakan antara parameter dan anggota data kelas. Tetapi jika kode dikompilasi ternyata kompiler tidak melaporkan adanya kesalahan. Mengapa? Tidak lain adalah dengan sendirinya kompiler menganggap semua data pada fungsi anggota diatas sebagai parameter. Sehingga nama anggota data kelas menjadi tersembunyi. Perlu ditekankan disini, bahwa kalau nama anggota data kelas teryata sama dengan nama parameter, nama anggota data tetap dapat diakses. pengaksessannya dengan menggunakan operator resolusi lingkup (::), dengan format :
nama_kelas::nama_anggota_data;
sehingga fungsi inisialisasi() dapat ditulis :
void Mhs::inisialisasi ( int nim, char *nama, char *alamat) { Mhs::nim = nim; strcpy(Mhs::nama,nama); strcpy(Mhs::alamat,alamat); }
Contoh program :
#include <iostream.h> #include <conio.h> #include <string.h> class Mhs { private : int nim; char nama[35]; char alamat[25]; public : void inisialisasi ( int nim, char *nama, char *alamat); void info (); }; void Mhs::inisialisasi ( int nim, char *nama, char *alamat) { Mhs::nim = nim; strcpy(Mhs::nama,nama); strcpy(Mhs::alamat,alamat); } void Mhs::info () { cout <<"Nim = " << nim << endl; cout <<"Nama = " << nama << endl; cout <<"Alamat = " << alamat << endl; } void main() //Fungsi utama { clrscr(); Mhs data; // Pendefinisian variabel Data.inisialisasi(123,"Nanang","Jogja"); Data.info(); getch(); } Nilai Balik Fungsi Anggota Fungsi anggota juga bisa mempunyai nilai balik : Contoh : #include <iostream.h> #include <conio.h> #include <iomanip.h> class Tanggal { private : int tanggal; int bulan; int tahun; public : void beri_tanggal(int tanggal, int bulan, int tahun); void info(); int info_tanggal() {return tanggal; }; int info_bulan() {return bulan;}; int info_tahun() {return tahun;}; }; void main() { clrscr(); Tanggal tanggal_lahir; tanggal_lahir.beri_tanggal(25,6,1991); tanggal_lahir.info(); cout << endl; cout <<"Tanggal : " << tanggal_lahir.info_tanggal() << '-' << tanggal_lahir.info_bulan() << '-' << tanggal_lahir.info_tahun(); getch(); } void Tanggal::beri_tanggal(int tanggal, int bulan, int tahun) { Tanggal::tanggal = tanggal; Tanggal::bulan = bulan; Tanggal::tahun = tahun; } void Tanggal::info() { cout << setfill('0'); cout << "Tanggal : " << setw(2) << tanggal << '/' << setw(2) << bulan << '/' << tahun << endl; cout << setfill(' '); } Contoh lain : #include <iostream.h> #include <conio.h> #include <string.h> class Mhs { private: int nim; char nama[35]; int angka; public: void init(int Nim, char *Nama, int angka); void tampil(); char hrf(); }; void main() { clrscr(); Mhs data,biodata; int nomhs; char nmmhs[30]; int nilangka; cin>>nomhs;cin>>nmmhs;cin>>nilangka; data.init(nomhs,nmmhs,nilangka); biodata=data; biodata.tampil(); getch(); } void Mhs::init(int nim, char *nama, int angka) { Mhs::nim=nim; strcpy(Mhs::nama, nama); Mhs::angka=angka; } void Mhs::tampil() { cout<<"Nim : "<<nim<<endl; cout<<"Nama : "<<nama<<endl; cout<<"Nilai : "<<angka<<endl; cout<<"Huruf : "<<hrf()<<endl; } char Mhs::hrf() { if(angka>80) return('A'); else if(angka>70) return('B'); else if(angka>60) return('C'); else if(angka>50) return('D'); else return('E'); }
Komentar
Posting Komentar
Kritik, Saran dan Komentar Kami tunggu