Upload
wahyudi
View
12
Download
0
Embed Size (px)
DESCRIPTION
pbo
Citation preview
InheritanceOleh:Syaiful Anam, S.Si, MTArtificial Intelligence and Image ProcessingApplied Mathematical Modeling And Computation Lab.Mathematics Department – Brawijaya University
www.matematika.brawijaya.ac.id
Inheritance C++ memungkinkan suatu kelas mewarisi
data ataupun fungsi anggota kelas lain. Sifat ini disebut Inheritance (Pewarisan)
Kelas yang mewarisi sifat kelas lain disebut kelas turunan (disebut derived class)
Sedangkan kelas yang mewariskan sifat ke kelas lain biasa dinamakan kelas dasar (Base Class)
www.matematika.brawijaya.ac.id
Gambar 1Kelas Dasar
Sifat ASifat B
Kelas Turunan
Sifat A
Sifat B
Sifat C
Sifat Spesific Kelas C
Sifat-Sifat Yang Diwariskan
www.matematika.brawijaya.ac.id
Contoh Disk
– Track– Sektor– Kapasitas
Floppy Disk – Track– Sektor– Kapasitas– Sifat Proteksi
www.matematika.brawijaya.ac.id
Contoh 1 #include<iostream.h> #include<conio.h> class Basis { private: int alfa; int beta;
public: void info_basis() { cout<<"info basis di jalankan"<<endl; } };
www.matematika.brawijaya.ac.id
Lanjutan class Turunan: public Basis { private : int gamma; public : void info_turunan() { cout<<"info turunan di
jalankan"<<endl; } }; void main() {
clrscr(); Turunan anak; anak.info_basis(); anak.info_turunan(); getch(); }
www.matematika.brawijaya.ac.id
Contoh 2
#include<iostream.h> #include<conio.h> class Basis { private:
int beta;
public: int alfa; void info_basis() { cout<<"info basis di jalankan"<<endl; } };
www.matematika.brawijaya.ac.id
Lanjutan class Turunan: public Basis { private : int gamma; public : void info_turunan() { cout<<"info turunan di jalankan "<<alfa<<endl; } };
void main() { clrscr(); Turunan anak; anak.info_basis(); anak.alfa=9; anak.info_turunan(); getch(); }
www.matematika.brawijaya.ac.id
Ilustrasi class X
– Private: a
– Protected: b c
– Public: X() ~X() Info()
Class Y: X Private:
lokal b c Info()
Protected: d
Public: Keterangan()
Konstruktor dan Destructor Tidak Diwariskan
www.matematika.brawijaya.ac.id
Ilustrasi class X
– Private: a
– Protected: b c
– Public: x() ~x() Info()
Class Y:public X Private:
lokal Protected:
b c d
Public: Info() Keterangan()
Konstruktor dan Destructor Tidak Diwariskan
www.matematika.brawijaya.ac.id
Ilustrasi class X
– Private: a
– Protected: b c
– Public: x() ~x() Info()
Class Y:protected X Private:
lokal Protected:
b c d Info()
Public: Keterangan()
Konstruktor dan Destructor Tidak Diwariskan
www.matematika.brawijaya.ac.id
Tabel Penentu Pewarisan
Penentu Pewarisan
Penentu akses dikelas dasar
Akses baru pada kelas turunan
Private PrivateProtectedPublic
Tidak DiwariskanPrivatePrivate
Protected PrivateProtectedPublic
Tidak DiwariskanProtectedProtected
Public PrivateProtectedpublic
Tidak DiwariskanProtectedpublic
www.matematika.brawijaya.ac.id
Konstruktor dan Destruktor pada Pewarisan
#include<iostream.h> #include<conio.h> #include<string.h> class Kendaraan { private:
char nama[15];
www.matematika.brawijaya.ac.id
Lanjutan public: Kendaraan(char *nama_kendaraan="xxx") { strcpy(nama,nama_kendaraan); cout<<"Hidupkan mesin kendaraan
Anda..."<<endl; } ~Kendaraan() { cout<<"Matikan mesin kendaraan Anda..."<<endl; } void info_kendaraan() { cout<<nama<<" sedang berjalan..."<<endl; } };
www.matematika.brawijaya.ac.id
Lanjutan class Truk: public Kendaraan { public : Truk(char *nama_truk):Kendaraan(nama_truk) { cout<<"Hidupkan mesin Truk Anda..."<<endl; } ~Truk() { cout<<"Matikan mesin Truk Anda..."<<endl; } void info_truk() { cout<<"info truk di jalankan "<<endl; } };
www.matematika.brawijaya.ac.id
Lanjutan void main() {
clrscr(); Truk fuso("Truk Fuso"); fuso.info_kendaraan(); fuso.info_truk(); cout<<"akhir main"<<endl; }
www.matematika.brawijaya.ac.id
Contoh 2
#include<iostream.h> #include<conio.h> #include<string.h> class Kendaraan { protected:
char nama[15];
public: Kendaraan(char *nama_kendaraan="xxx") { strcpy(nama,nama_kendaraan); cout<<"Hidupkan mesin kendaraan
Anda..."<<endl; } ~Kendaraan() { cout<<"Matikan mesin kendaraan
Anda..."<<endl; } void info_kendaraan() { cout<<nama<<" sedang berjalan..."<<endl; } };
www.matematika.brawijaya.ac.id
Lanjutan
class Truk: public Kendaraan { public : Truk(char *nama_truk) { strcpy(nama,nama_truk); cout<<"Hidupkan mesin Truk
Anda..."<<nama<<endl; } ~Truk() { cout<<"Matikan mesin Truk Anda..."<<endl; } void info_truk() { cout<<"info truk di jalankan "<<endl; } }; void main() {
clrscr(); Truk fuso("Truk Fuso"); fuso.info_kendaraan(); fuso.info_truk(); cout<<"akhir main"<<endl; }
www.matematika.brawijaya.ac.id
Pewarisan Beberapa Tingkat
Orang
Pegawai
Manajer
Kelas Dasar
Kelas Turunan 1
Kelas Turunan 2
www.matematika.brawijaya.ac.id
Contoh #include<iostream.h> #include<conio.h> #include<string.h> class orang { private: char nama[50]; int usia;
public: orang(char *nama,int usia); void info_orang(); };
class pegawai: public orang { private : char bagian[25]; int nomor_pegawai;
public : pegawai(char *nama,int usia, char *bagian,int
nomor_pegawai ); void info_pegawai(); };
www.matematika.brawijaya.ac.id
Lanjutan class manajer: public pegawai { private : char mobil[30]; public : manajer(char *nama,int usia, char *bagian,int
nomor_pegawai,char *mobil ); void info_manajer(); }; void main() {
clrscr(); manajer kabag_edp("Imam",35,"EDP",11885,"Sedan Volvo"); kabag_edp.info_manajer(); }
orang::orang(char *nama, int usia) { strcpy(orang::nama,nama); orang::usia=usia; }
void orang::info_orang() { cout<<" Nama :"<<nama<<endl; cout<<" Usia :"<<usia<<endl; }
www.matematika.brawijaya.ac.id
Lanjutan pegawai::pegawai(char *nama, int usia,char *bagian,int
nomor_pegawai):orang(nama,usia) { strcpy(pegawai::bagian,bagian); pegawai::nomor_pegawai=nomor_pegawai; }
void pegawai::info_pegawai() { info_orang(); cout<<" Bagian :"<<bagian<<endl; cout<<" nomor pegawai :"<<nomor_pegawai<<endl; }
manajer::manajer(char *nama, int usia,char *bagian,int nomor_pegawai,char *mobil):pegawai(nama,usia,bagian,nomor_pegawai)
{ strcpy(manajer::mobil,mobil); }
void manajer::info_manajer() { info_pegawai();
cout<<" Mobil :"<<mobil<<endl; }
www.matematika.brawijaya.ac.id
Fungsi Anggota Kelas Dasar dan Kelas Turunan Sama
Suatu kelas turunan dapat mendefinisikan fungsi anggota yang namanya sama dengan fungsi anggota kelas dasar.
Digunakan untuk menyederhanakan nama-nama fungsi anggota pada kelas-kelas yang berbeda.
www.matematika.brawijaya.ac.id
Contoh Pada Kelas orang, pegawai dan manajer,
informasi mengenai orang(orang,pegawai, manajer) dapat dinyatakan dengan fungsi yang sama, misalnya info_orang().
www.matematika.brawijaya.ac.id
Contoh #include<iostream.h> #include<conio.h> #include<string.h> class orang { private: char nama[50]; int usia;
public: orang(char *nama,int usia); void info_orang(); };
class pegawai: public orang { private : char bagian[25]; int nomor_pegawai;
public : pegawai(char *nama,int usia, char *bagian,int
nomor_pegawai ); void info_orang(); };
www.matematika.brawijaya.ac.id
Lanjutan
class manajer: public pegawai { private : char mobil[30]; public : manajer(char *nama,int usia, char *bagian,int
nomor_pegawai,char *mobil ); void info_orang(); }; void main() {
clrscr(); manajer kabag_edp("Imam",35,"EDP",11885,"Sedan
Volvo"); kabag_edp.info_orang(); pegawai staff("Acha",2,"EDP",12345); staff.info_orang(); }
www.matematika.brawijaya.ac.id
Lanjutan
orang::orang(char *nama, int usia) { strcpy(orang::nama,nama); orang::usia=usia; }
void orang::info_orang() { cout<<" Nama :"<<nama<<endl; cout<<" Usia :"<<usia<<endl; } pegawai::pegawai(char *nama, int usia,char *bagian,int
nomor_pegawai):orang(nama,usia) { strcpy(pegawai::bagian,bagian); pegawai::nomor_pegawai=nomor_pegawai; }
www.matematika.brawijaya.ac.id
Lanjutan
void pegawai::info_orang() { orang::info_orang(); cout<<" Bagian :"<<bagian<<endl; cout<<" nomor pegawai :"<<nomor_pegawai<<endl; }
manajer::manajer(char *nama, int usia,char *bagian,int nomor_pegawai,char *mobil):pegawai(nama,usia,bagian,nomor_pegawai)
{ strcpy(manajer::mobil,mobil); }
void manajer::info_orang() { pegawai::info_orang(); cout<<" Mobil :"<<mobil<<endl; }
www.matematika.brawijaya.ac.id
Pewarisan Ganda C++ memperkenankan sebuah kelas
mewarisi lebih dari satu kelas.
Bapak Ibu
Anak
www.matematika.brawijaya.ac.id
Contoh #include<iostream.h> #include<conio.h>
class Bapak { public: Bapak() { cout <<"konstruktor Bapak dijalankan..."<<endl; } ~Bapak() { cout <<"Destruktor Bapak dijalankan..."<<endl; } }; class Ibu { public: Ibu() { cout <<"konstruktor Ibu dijalankan..."<<endl; } ~Ibu() { cout <<"Destruktor Ibu dijalankan..."<<endl; } };
www.matematika.brawijaya.ac.id
Lanjutan class Anak : public Bapak, public Ibu { public: Anak() { cout <<"konstruktor Anak dijalankan..."<<endl; } ~Anak() { cout <<"Destruktor Anak dijalankan..."<<endl; } }; void main() { clrscr(); Anak kandung; cout<<"akhir main()..."<<endl; }
www.matematika.brawijaya.ac.id
Contoh 2 #include<iostream.h> #include<conio.h> #include<string.h>
class Buku { private: char judul[35]; char pengarang[25]; long harga; public: Buku(char *judul,char *pengarang,long harga); void info_buku(); }; class Disket { private: char ukuran[15]; long harga; public: Disket(char *ukuran,long harga); void info_disket(); };
www.matematika.brawijaya.ac.id
Lanjutan
class PaketBukuDisket : public Buku, public Disket { private: long harga; public: PaketBukuDisket(char *judul,char* pengarang,long harga_buku,char
*ukuran, long harga_disket); void info_paket(); }; void main() { clrscr(); PaketBukuDisket delphi("Pemrograman Delphi","Ir. Akbar",25000,"3
1/2in",12000); delphi.info_paket(); }
Buku::Buku(char *judul,char *pengarang,long harga) { strcpy(Buku::judul,judul); strcpy(Buku::pengarang,pengarang); Buku::harga=harga; }
www.matematika.brawijaya.ac.id
Lanjutan void Buku::info_buku() { cout<<"Judul Buku :"<<judul<<endl; cout<<"Pengarang :"<<judul<<endl; cout<<"Harga Buku :"<<harga<<endl; } Disket::Disket(char *ukuran,long harga) { strcpy(Disket::ukuran,ukuran); Disket::harga=harga; } void Disket::info_disket() { cout<<"ukuran :"<<ukuran<<endl; cout<<"Harga Disket :"<<harga<<endl; }
www.matematika.brawijaya.ac.id
Lanjutan PaketBukuDisket::PaketBukuDisket(char *judul,char*
pengarang,long harga_buku,char *ukuran, long harga_disket):Buku(judul,pengarang,harga_buku), Disket(ukuran,harga_disket)
{ harga=harga_buku+harga_disket; } void PaketBukuDisket::info_paket() { info_buku(); info_disket(); cout<<"Harga Total:"<<harga<<endl; }
www.matematika.brawijaya.ac.id
Kerancuan pada Pewarisan Ganda
Ada kemungkinan pada pewarisan ganda terdapat dua buah fungsi anggota pada kelas dasar dengan nama sama.
Jika kedua fungsi anggota ini diwariskan ke kelas turunan, bisa menimbulkan kerancuan.
www.matematika.brawijaya.ac.id
Contoh
#include<iostream.h> #include<conio.h>
class kelasA { public: void info() { cout <<"info kelas A dijalankan..."<<endl; } }; class kelasB { public: void info() { cout <<"info kelas B dijalankan..."<<endl; } };
www.matematika.brawijaya.ac.id
Lanjutan class kelasC : public kelasA, public kelasB { public: void infoC() { cout <<"info C dijalankan..."<<endl; } }; void main() { clrscr(); kelasC x; x.kelasA::info(); ( Mencetak informasi pada kelas A) x.kelasB::info(); ( Mencetak informasi pada kelas B) x.infoC(); }