38
Inheritance Oleh: Syaiful Anam, S.Si, MT Artificial Intelligence and Image Processing Applied Mathematical Modeling And Computation Lab. Mathematics Department – Brawijaya University

7.Inheritance

  • Upload
    wahyudi

  • View
    12

  • Download
    0

Embed Size (px)

DESCRIPTION

pbo

Citation preview

Page 1: 7.Inheritance

InheritanceOleh:Syaiful Anam, S.Si, MTArtificial Intelligence and Image ProcessingApplied Mathematical Modeling And Computation Lab.Mathematics Department – Brawijaya University

Page 2: 7.Inheritance

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)

Page 3: 7.Inheritance

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

Page 4: 7.Inheritance

www.matematika.brawijaya.ac.id

Contoh Disk

– Track– Sektor– Kapasitas

Floppy Disk – Track– Sektor– Kapasitas– Sifat Proteksi

Page 5: 7.Inheritance

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; } };

Page 6: 7.Inheritance

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(); }

Page 7: 7.Inheritance

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; } };

Page 8: 7.Inheritance

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(); }

Page 9: 7.Inheritance

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

Page 10: 7.Inheritance

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

Page 11: 7.Inheritance

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

Page 12: 7.Inheritance

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

Page 13: 7.Inheritance

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];

Page 14: 7.Inheritance

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; } };

Page 15: 7.Inheritance

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; } };

Page 16: 7.Inheritance

www.matematika.brawijaya.ac.id

Lanjutan void main() {

clrscr(); Truk fuso("Truk Fuso"); fuso.info_kendaraan(); fuso.info_truk(); cout<<"akhir main"<<endl; }

Page 17: 7.Inheritance

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; } };

Page 18: 7.Inheritance

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; }

Page 19: 7.Inheritance

www.matematika.brawijaya.ac.id

Pewarisan Beberapa Tingkat

Orang

Pegawai

Manajer

Kelas Dasar

Kelas Turunan 1

Kelas Turunan 2

Page 20: 7.Inheritance

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(); };

Page 21: 7.Inheritance

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; }

Page 22: 7.Inheritance

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; }

Page 23: 7.Inheritance

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.

Page 24: 7.Inheritance

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().

Page 25: 7.Inheritance

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(); };

Page 26: 7.Inheritance

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(); }

Page 27: 7.Inheritance

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; }

Page 28: 7.Inheritance

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; }

Page 29: 7.Inheritance

www.matematika.brawijaya.ac.id

Pewarisan Ganda C++ memperkenankan sebuah kelas

mewarisi lebih dari satu kelas.

Bapak Ibu

Anak

Page 30: 7.Inheritance

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; } };

Page 31: 7.Inheritance

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; }

Page 32: 7.Inheritance

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(); };

Page 33: 7.Inheritance

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; }

Page 34: 7.Inheritance

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; }

Page 35: 7.Inheritance

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; }

Page 36: 7.Inheritance

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.

Page 37: 7.Inheritance

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; } };

Page 38: 7.Inheritance

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(); }