Mengenal Struktur Pada C++

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 :
/** 
* ------------------------------- 
* 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');
} 

0 komentar