1 VIRTUAL & POLIMORFISME 1. FUNGSI VIRTUAL ; class MANUSIA { char* nama; int tinggi; int berat; void SetNama(char* N) { nama = N; void SetTinggi(int T...
VIRTUAL & POLIMORFISME 1. FUNGSI VIRTUAL #include using namespace std; class MANUSIA { char* nama; int tinggi; int berat; public: void SetNama(char* N) { nama = N; } void SetTinggi(int T) { tinggi = T; } void SetBerat(int B) { berat = B; } char* GetNama() { return nama; } int GetTinggi() { return tinggi; } int GetBerat() { return berat; } // Membuat fungsi virtual virtual void Berjalan() { cout<<"Berjalan"<<endl; } virtual void Berpakaian() { cout<<"Berpakaian"<<endl; } };
2. OVERRIDE #include using namespace std; class MANUSIA { char* nama; int tinggi; int berat; public: 1
void SetNama(char* N) { nama = N; } void SetTinggi(int T) { tinggi = T; } void SetBerat(int B) { berat = B; } char* GetNama() { return nama; } int GetTinggi() { return tinggi; } int GetBerat() { return berat; } // Membuat fungsi virtual virtual void Berjalan() { cout<<"Berjalan"<<endl; } virtual void Berpakaian() { cout<<"Berpakaian"<<endl; } }; class MAHASISWA: public MANUSIA { char* universitas; char* jurusan; int semester; public: void SetUniversitas(char* U) { universitas = U; } void SetJurusan(char* J) { jurusan = J; } void SetSemester(int smt) { semester = smt; } char* GetUniversitas() { return universitas; } char* GetJurusan() { return jurusan; } int GetSemester() { return semester; } // Melakukan override terhadap fungsi Berjalan void Berjalan() { cout<<"Berjalan dengan cara SANTAI"<<endl; } // Melakukan override terhadap fungsi Berpakaian 2
void Berpakaian() { cout<<"Berpakaian dengan baju BEBAS"<<endl; } }; class TENTARA: public MANUSIA { char* pangkat; char* kesatuan; public: void SetPangkat(char* pkt) { pangkat = pkt; } void SetKesatuan(char* kstn) { kesatuan = kstn; } char* GetPangkat() { return pangkat; } char* GetKesatuan() { return kesatuan; } // Melakukan override terhadap fungsi Berjalan void Berjalan() { cout<<"Berjalan dengan cara TEGAP"<<endl; } // Melakukan override terhadap fungsi Berpakaian void Berpakaian() { cout<<"Berpakaian dengan baju SERAGAM"<<endl; } }; // Fungsi utama int main() { // Melakukan instansiasi terhadap kelas MANUSIA MANUSIA M; // Melakukan instansiasi terhadap kelas MAHASISWA MAHASISWA MHS; // Melakukan instansiasi terhadap kelas TENTARA TENTARA TTR; // Memanggil fungsi Berjalan dari masing-masing kelas M.Berjalan(); MHS.Berjalan(); TTR.Berjalan(); cout<<'\n'; // Memanggil fungsi Berpakaian dari masing-masing kelas M.Berpakaian(); MHS. Berpakaian (); TTR. Berpakaian (); system("pause"); return 0; } 3
3. PERBEDAAN OVERRIDE DAN OVERLOAD #include using namespace std; class KARYAWAN { char* NIP; char* nama; double GajiPokok; public: void SetNIP(char* NoInduk) { NIP = NoInduk; } void SetNama(char* nm) { nama = nm; } void SetGajiPokok(double GP) { GajiPokok = GP; } char* GetNIP() { return NIP; } char* GetNama() { return nama; } double GetGajiPokok() { return GajiPokok; } // Membuat fungsi virtual virtual void Bekerja() { cout<<"Bekerja"<<endl; } }; // Membuat kelas PROGRAMMER yang diturunkan dari kelas KARYAWAN class PROGRAMMER: public KARYAWAN { double bonus; public: // Melakukan overload pada fungsi constructor kelas PROGRAMMER PROGRAMMER() { bonus = 0; } PROGRAMMER(double bns) { bonus = bns; } double GetBonus() { return bonus; }
4
// Melakukan override terhadap fungsi Bekerja void Bekerja() { cout<<"Bekerja dengan cara membuat program " \ "menggunakan komputer"; cout<<endl; } }; class GURU: public KARYAWAN { char* MateriAjar; public: void SetMateriAjar(char* MA) { MateriAjar = MA; } char* GetMateriAjar() { return MateriAjar; } // Melakukan override terhadap fungsi Bekerja void Bekerja() { cout<<"Bekerja dengan cara mengajar di depan kelas"; cout<<'\n'; } }; // Fungsi utama int main() { // Melakukan instansiasi terhadap kelas PROGRAMMER // dengan mengeset bonus sebesar 1000000 PROGRAMMER P(1000000); // Melakukan instansiasi terhadap kelas GURU GURU G; // Memanggil fungsi bekerja untuk kelas PROGRAMMER dan GURU P.Bekerja(); G.Bekerja(); system ("pause"); return 0; }
4. FUNGSI VIRTUAL MURNI #include using namespace std; class MANUSIA { char* nama; int tinggi; int berat; public: 5
// Membuat fungsi virtual murni, // artinya tanpa definisi/implementasi virtual void Berjalan() = 0; virtual void Berpakaian() = 0; void SetNama(char* N) { nama = N; } void SetTinggi(int T) { tinggi = T; } void SetBerat(int B) { berat = B; } char* GetNama() { return nama; } int GetTinggi() { return tinggi; } int GetBerat() { return berat; } }; class MAHASISWA: public MANUSIA { char* universitas; char* jurusan; int semester; public: void SetUniversitas(char* U) { universitas = U; } void SetJurusan(char* J) { jurusan = J; } void SetSemester(int smt) { semester = smt; } char* GetUniversitas() { return universitas; } char* GetJurusan() { return jurusan; } int GetSemester() { return semester; } // Mendefinisikan fungsi Berjalan untuk kelas MAHASISWA void Berjalan() { cout<<"Mahasiswa berjalan dengan cara SANTAI"<<endl; } // Mendefinisikan fungsi Berpakaian untuk kelas MAHASISWA void Berpakaian() { cout<<"Mahasiswa berpakaian dengan baju BEBAS"<<endl; 6
} }; class TENTARA: public MANUSIA { char* pangkat; char* kesatuan; public: void SetPangkat(char* pkt) { pangkat = pkt; } void SetKesatuan(char* kstn) { kesatuan = kstn; } char* GetPangkat() { return pangkat; } char* GetKesatuan() { return kesatuan; } // Mendefinisikan fungsi Berjalan untuk kelas TENTARA void Berjalan() { cout<<"Tentara berjalan dengan cara TEGAP"<<endl; } // Mendefinisikan fungsi Berpakaian untuk kelas TENTARA void Berpakaian() { cout<<"Tentara berpakaian dengan baju SERAGAM"<<endl; } }; // Fungsi utama int main() { // Melakukan instansiasi terhadap kelas MAHASISWA MAHASISWA M; // Melakukan instansiasi terhadap kelas TENTARA TENTARA T; // Memanggil fungsi Berjalan dari masing-masing kelas M.Berjalan(); T.Berjalan(); cout<<endl; // Memanggil fungsi Berpakaian dari masing-masing kelas M. Berpakaian (); T. Berpakaian (); system("pause"); return 0; }
7
5. VIRTUAL DECTRUCTOR #include using namespace std; class INDUK { public: ~INDUK() { cout<<"Destructor kelas INDUK"<<endl; } }; class TURUNAN: public INDUK { public: ~TURUNAN() { cout<<"Destructor kelas TURUNAN"<<endl; } }; // Fungsi utama int main() { // Mendeklarasikan pointer yang bertipe kelas INDUK INDUK *PI; // Mengalokasikan ruang untuk menempatkan objek TURUNAN PI = new TURUNAN; // Menghapus pointer PI delete PI; system("pause"); return 0; }
6. KELAS ABSTRAK #include using namespace std; class KARYAWAN { public: virtual void Bekerja() = 0; }; class PROGRAMMER: public KARYAWAN { public: void Bekerja() { cout<<"Bekerja dengan cara membuat program " \ "menggunakan komputer"; cout<<endl; } }; 8
class GURU: public KARYAWAN { public: void Bekerja() { cout<<"Bekerja dengan cara mengajar di depan kelas"; cout<<endl; } }; // Fungsi utama int main() { // Melakukan instansiasi terhadap kelas KARYAWAN KARYAWAN A; // SALAH, tidak diizinkan oleh kompiler // Melakukan instansiasi terhadap kelas PROGRAMMER PROGRAMMER B; // Melakukan instansiasi terhadap kelas GURU GURU C; system("pause"); return 0; }
7. POLIMORFISME #include using namespace std; class KARYAWAN { public: virtual void Bekerja() = 0; }; class PROGRAMMER: public KARYAWAN { public: void Bekerja() { cout<<"Bekerja dengan cara membuat program " \ "menggunakan komputer"; cout<<endl; } }; class GURU: public KARYAWAN { public: void Bekerja() { cout<<"Bekerja dengan cara mengajar di depan kelas"; cout<<endl; } }; // Fungsi utama int main() { 9
// Mendeklarasikan pointer yang bertipe kelas KARYAWAN KARYAWAN *P; P = new PROGRAMMER; P->Bekerja(); delete P;
// Menghapus pointer P // yang menunjuk ke tipe PROGRAMMER
P = new GURU; P->Bekerja(); system("pause"); return 0; }