POLIMORFISME
Soal & Penyelesaian
1.
Tulislah sebuah program C++ untuk mendemonstrasikan penggunaan
dynamic_cast.
Penyelesaian:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
//dynamic_cast.cpp
#include
<iostream>
#include
<conio.h>
using namespace std;
enum TIPE { KUDA, PEGASUS };
class Kuda
{
public:
virtual void Berlari(){ cout << "Berlari...\n"; }
private:
int umurNya;
};
class Pegasus : public Kuda
{
public:
virtual void Terbang()
{cout<<"Bisa
terbang! Bisa terbang! Bisa terbang!\n";}
};
const int
JumlahKuda = 5;
int main()
{
Kuda*
Kandang[JumlahKuda];
Kuda* pKuda;
int pilihan,i;
for (i=0; i<JumlahKuda; i++)
{
cout <<
"(1)Kuda (2)Pegasus: ";
cin >>
pilihan;
if (pilihan == 2)
pKuda = new Pegasus;
else
pKuda = new Kuda;
Kandang[i] = pKuda;
}
cout <<
endl;
for (i=0; i<JumlahKuda; i++)
{
Pegasus *pPeg
= dynamic_cast< Pegasus *>
(Kandang[i]);
if (pPeg != NULL)
pPeg->Terbang();
else
cout
<< "Seekor kuda\n";
delete Kandang[i];
}
getch();
return 0;
}
|
(1)Kuda (2)Pegasus: 1
(1)Kuda (2)Pegasus: 2
(1)Kuda (2)Pegasus: 1
(1)Kuda (2)Pegasus: 2
(1)Kuda (2)Pegasus: 1
Seekor kuda
Bisa terbang! Bisa terbang! Bisa terbang!
Seekor kuda
Bisa terbang! Bisa terbang! Bisa terbang!
Seekor kuda
2. Demonstrasikanlah
pewarisan jamak, dimana dilakukan penderivasian sebuah kelas baru dari beberapa
kelas basis.
Penyelesaian:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
//pewarisanJamak.cpp
#include <iostream>
#include <conio.h>
using std::cout;
using std::cin;
using std::endl;
class Kuda
{
public:
Kuda() { cout << "konstruktor Kuda ... "; }
virtual
~Kuda() { cout << "destruktor
Kuda ... "; }
virtual
void Mengeluh() const { cout << "Mengeluh!... "; }
private:
int
umurNya;
};
class Burung
{
public:
Burung() { cout << "konstruktor Burung ... "; }
virtual
~Burung() { cout << "destruktor
Burung ... "; }
virtual
void Bersuara() const { cout
<< "Bersuara... ";
}
virtual
void Terbang() const
{
cout << "Saya bisa terbang! Saya bisa terbang! Saya bisa
terbang! ";
}
private:
int
beratNya;
};
class Pegasus : public
Kuda, public Burung
{
public:
void
Bersuara() const { Mengeluh(); }
Pegasus() { cout << "konstruktor Pegasus ... "; }
~Pegasus() { cout << "destruktor Pegasus ... "; }
};
const int AngkaAjaib
= 2;
int main()
{
Kuda* Kandang[AngkaAjaib];
Burung* Aviari[AngkaAjaib];
Kuda * pKuda;
Burung * pBurung;
int
pilihan,i;
for
(i=0; i<AngkaAjaib; i++)
{
cout << "\n(1)Kuda (2)Pegasus: ";
cin >> pilihan;
if
(pilihan == 2)
pKuda = new Pegasus;
else
pKuda = new Kuda;
Kandang[i] = pKuda;
}
for
(i=0; i<AngkaAjaib; i++)
{
cout << "\n(1)Burung (2)Pegasus: ";
cin >> pilihan;
if
(pilihan == 2)
pBurung = new Pegasus;
else
pBurung = new Burung;
Aviari[i] = pBurung;
}
cout << endl;
for
(i=0; i<AngkaAjaib; i++)
{
cout << "\nKandang[" << i <<
"]: " ;
Kandang[i]->Mengeluh();
delete
Kandang[i];
}
for
(i=0; i<AngkaAjaib; i++)
{
cout << "\nAviari[" << i <<
"]: " ;
Aviari[i]->Bersuara();
Aviari[i]->Terbang();
delete
Aviari[i];
}
getch();
return
0;
}
|
(1)Kuda (2)Pegasus: 1
konstruktor Kuda ...
(1)Kuda (2)Pegasus: 2
konstruktor Kuda ... konstruktor Burung ...
konstruktor Pegasus ...
(1)Burung (2)Pegasus: 1
konstruktor Burung ...
(1)Burung (2)Pegasus: 2
konstruktor Kuda ... konstruktor Burung ...
konstruktor Pegasus ...
Kandang[0]: Mengeluh!... destruktor Kuda ...
Kandang[1]: Mengeluh!... destruktor Pegasus ...
destruktor Burung ... destruktor
Kuda ...
Aviari[0]: Bersuara... Saya bisa terbang! Saya
bisa terbang! Saya bisa terbang!
destruktor Burung ...
Aviari[1]: Mengeluh!... Saya bisa terbang! Saya
bisa terbang! Saya bisa terbang!
destruktor Pegasus ... destruktor Burung ...
destruktor Kuda ...
3. Demonstrasikanlah
konstruktor-konstruktor pada objek yang mewarisi lebih dari dua kelas basis.
Jika Pegasus mewarisi dari Kuda dan Burung, dan tiap kelas basis tersebut memiliki konstruktor yang
memiliki parameter, maka kelas Pegasus
akan menginisialisasi konstruktor-konstruktor tersebut secara bergiliran. Kode
berikut mengilustrasikan permasalahan ini.
Penyelesaian:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
//konstruktorPewarisanJamak.cpp
//Memanggil
konstruktor-konstruktor kelas basis pada pewarisan jamak
#include <iostream>
#include <conio.h>
using namespace std;
typedef int TUBUH;
enum WARNA { Merah, Hijau, Biru, Kuning, Putih, Hitam, Coklat }
;
class Kuda
{
public:
Kuda(WARNA warna, TUBUH tinggi);
virtual
~Kuda() { cout << "konstruktor
Kuda ...\n"; }
virtual
void Mengeluh()const { cout << "Mengeluh!... "; }
virtual
TUBUH GetTinggi() const { return tinggiNya; }
virtual
WARNA GetWarna() const { return warnaNya; }
private:
TUBUH tinggiNya;
WARNA warnaNya;
};
Kuda::Kuda(WARNA warna,
TUBUH tinggi):
warnaNya(warna),tinggiNya(tinggi)
{
cout << "konstruktor Kuda
...\n";
}
class Burung
{
public:
Burung(WARNA warna, bool migrasi);
virtual
~Burung() {cout << "destruktor
Burung ...\n"; }
virtual
void Bersuara()const { cout << "Bersuara... "; }
virtual
void Terbang()const
{
cout << "Saya bisa terbang! Saya bisa terbang! Saya bisa
terbang! ";
}
virtual
WARNA GetWarna()const { return warnaNya; }
virtual
bool GetMigrasi() const { return migrasiNya; }
private:
WARNA warnaNya;
bool
migrasiNya;
};
Burung::Burung(WARNA
warna, bool migrasi):
warnaNya(warna),
migrasiNya(migrasi)
{
cout << "konstruktor Burung
...\n";
}
class Pegasus : public
Kuda, public Burung
{
public:
void
Bersuara()const { Mengeluh(); }
Pegasus(WARNA, TUBUH, bool,long);
~Pegasus() {cout << "destruktor Pegasus ...\n";}
virtual
long GetJumlah() const
{
return
jumlahNya;
}
private:
long
jumlahNya;
};
Pegasus::Pegasus(
WARNA aColor,
TUBUH tinggi,
bool
migrasi,
long
Jumlah):
Kuda(aColor, tinggi),
Burung(aColor, migrasi),
jumlahNya(Jumlah)
{
cout << "konstruktor Pegasus...\n";
}
int main()
{
Pegasus *pPeg = new Pegasus(Merah, 5, true,
10);
pPeg->Terbang();
pPeg->Mengeluh();
cout << "\nPegasus Anda setinggi " << pPeg->GetTinggi();
cout << " kaki dan ";
if
(pPeg->GetMigrasi())
cout << "ia bermigrasi.";
else
cout << "ia tidak bermigrasi.";
cout << "\nSebanyak " << pPeg->GetJumlah();
cout << " orang percaya bahwa ia ada." <<
endl;
delete
pPeg;
getch();
return
0;
}
|
konstruktor Kuda ...
konstruktor Burung ...
konstruktor Pegasus...
Saya bisa terbang! Saya bisa terbang! Saya bisa
terbang! Mengeluh!...
Pegasus Anda setinggi 5 kaki dan ia bermigrasi.
Sebanyak 10 orang percaya bahwa ia ada.
destruktor Pegasus ...
destruktor Burung ...
konstruktor Kuda ...
4. Apa yang terjadi jika
kedua kelas Burung dan Kuda mewarisi dari sebuah kelas basis
bersama, seperti Binatang? Gambar
berikut mengilustrasikan hal ini.
Tulislah
sebuah program C++ untuk mengimplementasikannya.
Penyelesaian:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
//kelasBasisBersama.cpp
#include
<iostream>
#include
<conio.h>
using namespace std;
typedef int
TUBUH;
enum WARNA { Merah, Hijau, Biru, Kuning,
Putih, Hitam, Coklat } ;
class Binatang // basis bersama untuk kuda
dan burung
{
public:
Binatang(int);
virtual ~Binatang() { cout <<
"destruktor Binatang...\n";
}
virtual int GetUmur() const { return umurNya; }
virtual void SetUmur(int umur)
{ umurNya = umur; }
private:
int umurNya;
};
Binatang::Binatang(int
umur):
umurNya(umur)
{
cout <<
"konstruktor Binatang...\n";
}
class Kuda:public Binatang
{
public:
Kuda(WARNA warna,
TUBUH tinggi, int umur);
virtual ~Kuda() { cout <<
"konstruktor Kuda ...\n"; }
virtual void Mengeluh()const { cout <<
"Mengeluh!... "; }
virtual TUBUH GetTinggi() const { return tinggiNya; }
virtual WARNA GetWarna() const { return warnaNya; }
protected:
TUBUH tinggiNya;
WARNA warnaNya;
};
Kuda::Kuda(WARNA warna, TUBUH tinggi, int umur):
Binatang(umur),
warnaNya(warna),tinggiNya(tinggi)
{
cout <<
"konstruktor Kuda ...\n";
}
class Burung:public Binatang
{
public:
Burung(WARNA
warna, bool migrasi, int umur);
virtual ~Burung() {cout <<
"destruktor Burung ...\n"; }
virtual void Bersuara()const {
cout << "Bersuara...
"; }
virtual void Terbang()const
{
cout <<
"Saya bisa terbang! Saya
bisa terbang! Saya bisa terbang! ";
}
virtual WARNA GetWarna()const { return warnaNya; }
virtual bool GetMigrasi()const
{ return migrasiNya; }
protected:
WARNA warnaNya;
bool migrasiNya;
};
Burung::Burung(WARNA warna, bool migrasi, int
umur):
Binatang(umur),
warnaNya(warna), migrasiNya(migrasi)
{
cout <<
"konstruktor Burung ...\n";
}
class Pegasus : public Kuda, public
Burung
{
public:
void Bersuara()const { Mengeluh(); }
Pegasus(WARNA,
TUBUH, bool, long, int);
~Pegasus() {cout
<< "destruktor Pegasus ...\n";}
virtual long GetJumlah() const
{
return jumlahNya;
}
virtual WARNA GetWarna()const { return Kuda::warnaNya; }
virtual int GetUmur() const { return Kuda::GetUmur(); }
protected:
long jumlahNya;
};
Pegasus::Pegasus(
WARNA aColor,
TUBUH tinggi,
bool migrasi,
long Jumlah,
int umur):
Kuda(aColor,
tinggi, umur),
Burung(aColor, migrasi, umur),
jumlahNya(Jumlah)
{
cout <<
"konstruktor Pegasus...\n";
}
int main()
{
Pegasus *pPeg = new Pegasus(Merah, 5, true, 10, 2);
int umur = pPeg->GetUmur();
cout <<
"Pegasus ini berusia "
<< umur << " tahun.\n";
delete pPeg;
getch();
return 0;
}
|
konstruktor Binatang...
konstruktor Kuda ...
konstruktor Binatang...
konstruktor Burung ...
konstruktor Pegasus...
Pegasus ini berusia 2 tahun.
destruktor Pegasus ...
destruktor Burung ...
destruktor Binatang...
konstruktor Kuda ...
destruktor Binatang...
5. Demonstrasikanlah
pewarisan virtual, seperti ditunjukkan pada gambar berikut.
Tulislah
sebuah program C++ untuk mengimplementasikannya.
Penyelesaian:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
//pewarisanVirtual.cpp
#include <iostream>
#include <conio.h>
using namespace std;
typedef int TUBUH;
enum WARNA { Merah, Hijau, Biru, Kuning, Putih, Hitam, Coklat }
;
class Binatang // basis bersama untuk kuda dan burung
{
public:
Binatang(int);
virtual
~Binatang() { cout << "destruktor
Binatang...\n"; }
virtual
int GetUmur() const { return
umurNya; }
virtual
void SetUmur(int umur) { umurNya = umur; }
private:
int
umurNya;
};
Binatang::Binatang(int umur):
umurNya(umur)
{
cout << "konstruktor Binatang...\n";
}
class Kuda:virtual public Binatang
{
public:
Kuda(WARNA warna, TUBUH tinggi, int
umur);
virtual
~Kuda() { cout << "konstruktor
Kuda ...\n"; }
virtual
void Mengeluh()const { cout
<< "Mengeluh!...
"; }
virtual
TUBUH GetTinggi() const { return tinggiNya; }
virtual
WARNA GetWarna() const { return warnaNya; }
protected:
TUBUH tinggiNya;
WARNA warnaNya;
};
Kuda::Kuda(WARNA warna,
TUBUH tinggi, int umur):
Binatang(umur),
warnaNya(warna),tinggiNya(tinggi)
{
cout << "konstruktor Kuda
...\n";
}
class Burung:virtual public
Binatang
{
public:
Burung(WARNA warna, bool migrasi, int
umur);
virtual
~Burung() {cout << "destruktor
Burung ...\n"; }
virtual
void Bersuara()const { cout << "Bersuara... "; }
virtual
void Terbang()const
{
cout << "Saya bisa terbang! Saya bisa terbang! Saya bisa
terbang! ";
}
virtual
WARNA GetWarna()const { return warnaNya; }
virtual
bool GetMigrasi()const { return migrasiNya; }
protected:
WARNA warnaNya;
bool
migrasiNya;
};
Burung::Burung(WARNA
warna, bool migrasi, int umur):
Binatang(umur),
warnaNya(warna),
migrasiNya(migrasi)
{
cout << "konstruktor Burung ...\n";
}
class Pegasus : public
Kuda, public Burung
{
public:
void
Bersuara()const { Mengeluh(); }
Pegasus(WARNA, TUBUH, bool, long, int);
virtual
~Pegasus() {cout << "destruktor
Pegasus ...\n";}
virtual
long GetJumlah() const
{
return
jumlahNya;
}
virtual
WARNA GetWarna()const { return Kuda::warnaNya; }
private:
long
jumlahNya;
};
Pegasus::Pegasus(
WARNA aColor,
TUBUH tinggi,
bool
migrasi,
long
Jumlah,
int
umur):
Kuda(aColor, tinggi, umur),
Burung(aColor, migrasi, umur),
Binatang(umur*2),
jumlahNya(Jumlah)
{
cout << "konstruktor Pegasus...\n";
}
int main()
{
Pegasus *pPeg = new Pegasus(Merah, 5, true, 10, 2);
int
umur = pPeg->GetUmur();
cout << "Pegasus ini berusia " << umur <<
" tahun.\n";
delete
pPeg;
getch();
return
0;
}
|
konstruktor Binatang...
konstruktor Kuda ...
konstruktor Burung ...
konstruktor Pegasus...
Pegasus ini berusia 4 tahun.
destruktor Pegasus ...
destruktor Burung ...
konstruktor Kuda ...
destruktor Binatang...
6. Seringkali, Anda
perlu menciptakan sebuah hirarki sedemikian rupa sehingga Anda akan menciptakan
sebuah kelas Bangun, dan mewariskannya
kepada kelas PersegiPanjang dan
kelas Lingkaran. Dari PersegiPanjang, Adan akan mewariskan
kepada kelas Persegi, yang merupakan
kasus spesial dari PersegiPanjang.
Setiap kelas terderivasi akan mendefinisikan-ulang metode Gambar(), metode GetLuas(),
dan seterusnya. Demonstrasikanlah dan implementasikanlah kelas Bangun dan kelas-kelas terderivasinya,
kelas Lingkaran dan kelas PersegiPanjang.
Penyelesaian:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
//kelasBangun.cpp
#include
<iostream>
#include
<conio.h>
using std::cout;
using std::cin;
using std::endl;
class Bangun
{
public:
Bangun(){}
virtual ~Bangun(){}
virtual long GetLuas() { return
-1; } // error
virtual long GetKeliling() { return
-1; }
virtual void Gambar() {}
private:
};
class Lingkaran : public Bangun
{
public:
Lingkaran(int radius):radiusNya(radius){}
~Lingkaran(){}
long GetLuas() { return 3 * radiusNya * radiusNya; }
long GetKeliling() { return 6 * radiusNya; }
void Gambar();
private:
int
radiusNya;
int
kelilingNya;
};
void Lingkaran::Gambar()
{
cout << "Fungsi penggambar Lingkaran di sini!\n";
}
class PersegiPanjang : public Bangun
{
public:
PersegiPanjang(int pjg, int lebar):
panjangNya(pjg),
lebarNya(lebar){}
virtual ~PersegiPanjang(){}
virtual long GetLuas() { return
panjangNya * lebarNya; }
virtual long GetKeliling() {return
2*panjangNya + 2*lebarNya; }
virtual int GetPanjang() { return
panjangNya; }
virtual int GetLebar() { return
lebarNya; }
virtual void Gambar();
private:
int lebarNya;
int panjangNya;
};
void PersegiPanjang::Gambar()
{
for (int i = 0; i<panjangNya; i++)
{
for (int j = 0; j<lebarNya; j++)
cout
<< "x ";
cout <<
"\n";
}
}
class Persegi : public PersegiPanjang
{
public:
Persegi(int pjg);
Persegi(int pjg, int lebar);
~Persegi(){}
long GetKeliling() {return 4 * GetPanjang();}
};
Persegi::Persegi(int
pjg):
PersegiPanjang(pjg,pjg)
{}
Persegi::Persegi(int
pjg, int lebar):
PersegiPanjang(pjg,lebar)
{
if (GetPanjang() != GetLebar())
cout <<
"Error, bukan Persegi...bukan
PersegiPanjang??\n";
}
int main()
{
int pilihan;
bool fKeluar = false;
Bangun * sp;
while ( !fKeluar )
{
cout <<
"(1)Lingkaran
(2)PersegiPanjang (3)Persegi (0)Keluar: ";
cin >>
pilihan;
switch (pilihan)
{
case 0: fKeluar = true;
break;
case 1: sp = new Lingkaran(5);
break;
case 2: sp = new PersegiPanjang(4,6);
break;
case 3: sp = new Persegi(5);
break;
default:
cout
<<"Silahkan
masukkan angka antara 0 dan 3"<<endl;
continue;
break;
}
if( !fKeluar )
sp->Gambar();
delete sp;
sp = 0;
cout <<
endl;
}
getch();
return 0;
}
|
(1)Lingkaran (2)PersegiPanjang (3)Persegi
(0)Keluar: 1
Fungsi penggambar Lingkaran di sini!
(1)Lingkaran (2)PersegiPanjang (3)Persegi
(0)Keluar: 2
x x x x x x
x x x x x x
x x x x x x
x x x x x x
(1)Lingkaran (2)PersegiPanjang (3)Persegi
(0)Keluar: 3
x x x x x
x x x x x
x x x x x
x x x x x
x x x x x
(1)Lingkaran (2)PersegiPanjang (3)Persegi
(0)Keluar:
7. Demonstrasikanlah
penggunaan fungsi virtual murni.
Penyelesaian:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
//fungsiVirtualMurni.cpp
#include
<iostream>
#include
<conio.h>
using std::cout;
using std::cin;
using std::endl;
class Bangun
{
public:
Bangun(){}
virtual ~Bangun(){}
virtual long GetLuas() = 0;
virtual long GetKeliling() = 0;
virtual void Gambar() = 0;
private:
};
void Bangun::Gambar()
{
cout <<
"Mekanisme penggambar abstrak!\n";
}
class Lingkaran : public Bangun
{
public:
Lingkaran(int radius):radiusNya(radius){}
virtual ~Lingkaran(){}
long GetLuas() { return 3 * radiusNya * radiusNya; }
long GetKeliling() { return 6 * radiusNya; }
void Gambar();
private:
int radiusNya;
int kelilingNya;
};
void Lingkaran::Gambar()
{
cout <<
"Fungsi penggambar Lingkaran di
sini!\n";
Bangun::Gambar();
}
class PersegiPanjang : public Bangun
{
public:
PersegiPanjang(int pjg, int lebar):
panjangNya(pjg),
lebarNya(lebar){}
virtual ~PersegiPanjang(){}
virtual long GetLuas() { return
panjangNya * lebarNya; }
virtual long GetKeliling() {return
2*panjangNya + 2*lebarNya; }
virtual int GetPanjang() { return
panjangNya; }
virtual int GetLebar() { return
lebarNya; }
void Gambar();
private:
int lebarNya;
int panjangNya;
};
void PersegiPanjang::Gambar()
{
for (int i = 0; i<panjangNya; i++)
{
for (int j = 0; j<lebarNya; j++)
cout
<< "x ";
cout <<
"\n";
}
Bangun::Gambar();
}
class Persegi : public PersegiPanjang
{
public:
Persegi(int pjg);
Persegi(int pjg, int lebar);
virtual ~Persegi(){}
long GetKeliling() {return 4 * GetPanjang();}
};
Persegi::Persegi(int
pjg):
PersegiPanjang(pjg,pjg)
{}
Persegi::Persegi(int pjg, int lebar):
PersegiPanjang(pjg,lebar)
{
if (GetPanjang() != GetLebar())
cout <<
"Error, bukan
Persegi...bukan PersegiPanjang??\n";
}
int main()
{
int pilihan;
bool fKeluar = false;
Bangun * sp;
while ( !fKeluar )
{
cout <<
"(1)Lingkaran
(2)PersegiPanjang (3)Persegi (0)Keluar: ";
cin >>
pilihan;
switch (pilihan)
{
case 0: fKeluar = true;
break;
case 1: sp = new Lingkaran(5);
break;
case 2: sp = new PersegiPanjang(4,6);
break;
case 3: sp = new Persegi(5);
break;
default:
cout
<<"Silahkan
masukkan angka antara 0 dan 3"<<endl;
continue;
break;
}
if( !fKeluar )
sp->Gambar();
delete sp;
sp = 0;
cout <<
endl;
}
getch();
return 0;
}
|
(1)Lingkaran (2)PersegiPanjang (3)Persegi
(0)Keluar: 1
Fungsi penggambar Lingkaran di sini!
Mekanisme penggambar abstrak!
(1)Lingkaran (2)PersegiPanjang (3)Persegi
(0)Keluar: 2
x x x x x x
x x x x x x
x x x x x x
x x x x x x
Mekanisme penggambar abstrak!
(1)Lingkaran (2)PersegiPanjang (3)Persegi
(0)Keluar: 3
x x x x x
x x x x x
x x x x x
x x x x x
x x x x x
Mekanisme penggambar abstrak!
(1)Lingkaran (2)PersegiPanjang (3)Persegi
(0)Keluar:
8. Demonstrasikanlah
mekanisme pewarisan kelas abstrak dari kelas abstrak lainnya.
Penyelesaian:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
//pewarisanAbstrak.cpp
#include
<iostream>
#include
<conio.h>
using namespace
std;
enum WARNA { Merah, Hijau, Biru, Kuning,
Putih, Hitam, Coklat } ;
class Binatang // kelas basis bersama untuk
Mammal dan Ikan
{
public:
Binatang(int);
virtual ~Binatang() { cout <<
"destruktor Binatang ...\n"; }
virtual int GetUmur() const { return umurNya; }
virtual void SetUmur(int umur)
{ umurNya = umur; }
virtual void Tidur() const =
0;
virtual void Makan() const =
0;
virtual void Reproduksi() const
= 0;
virtual void Bergerak() const
= 0;
virtual void Bicara() const =
0;
private:
int umurNya;
};
Binatang::Binatang(int
umur):
umurNya(umur)
{
cout <<
"konstruktor Binatang ...\n";
}
class Mammal : public Binatang
{
public:
Mammal(int umur):Binatang(umur)
{ cout <<
"konstruktor Mammal ...\n";}
virtual ~Mammal()
{ cout << "destruktor Mammal ...\n";}
virtual void
Reproduksi() const
{ cout <<
"Reproduksi Mammal...\n"; }
};
class Ikan : public Binatang
{
public:
Ikan(int umur):Binatang(umur)
{ cout <<
"konstruktor Ikan ...\n";}
virtual ~Ikan() {cout << "destruktor Ikan ...\n"; }
virtual void Tidur() const {
cout << "Ikan mengorok...\n"; }
virtual void Makan() const {
cout << "Ikan makan...\n"; }
virtual void Reproduksi() const
{ cout <<
"Ikan bertelur...\n"; }
virtual void Bergerak() const
{ cout <<
"Ikan berenang...\n"; }
virtual void Bicara() const {
}
};
class Kuda : public Mammal
{
public:
Kuda(int umur, WARNA warna ):
Mammal(umur),
warnaNya(warna)
{ cout <<
"konstruktor Kuda ...\n"; }
virtual ~Kuda() { cout <<
"destruktor Kuda ...\n"; }
virtual void Bicara()const {
cout << "Mengeluh!...
\n"; }
virtual WARNA GetWarnaNya() const { return warnaNya; }
virtual void Tidur() const
{ cout <<
"Kuda mengorok...\n"; }
virtual void Makan() const {
cout << "Kuda makan...\n"; }
virtual void Bergerak() const
{ cout << "Kuda berlari...\n";}
protected:
WARNA warnaNya;
};
class Anjing : public Mammal
{
public:
Anjing(int umur, WARNA warna ):
Mammal(umur),
warnaNya(warna)
{ cout <<
"konstruktor Anjing ...\n"; }
virtual ~Anjing() { cout <<
"destruktor Anjing ...\n"; }
virtual void Bicara()const {
cout << "Guk Guk!... \n"; }
virtual void Tidur() const {
cout << "Anjing mengorok...\n"; }
virtual void Makan() const {
cout << "Anjing makan...\n"; }
virtual void Bergerak() const
{ cout << "Anjing berlari...\n"; }
virtual void Reproduksi() const
{ cout <<
"Anjing bereproduksi ...\n"; }
protected:
WARNA warnaNya;
};
int main()
{
Binatang
*pBinatang=0;
int pilihan;
bool fKeluar = false;
while (fKeluar == false)
{
cout <<
"(1)Anjing (2)Kuda (3)Ikan
(0)Keluar: ";
cin >>
pilihan;
switch (pilihan)
{
case 1: pBinatang = new Anjing(5,Coklat);
break;
case 2: pBinatang = new Kuda(4,Hitam);
break;
case 3: pBinatang = new Ikan (5);
break;
default: fKeluar = true;
break;
}
if (fKeluar == false)
{
pBinatang->Bicara();
pBinatang->Makan();
pBinatang->Reproduksi();
pBinatang->Bergerak();
pBinatang->Tidur();
delete pBinatang;
cout
<< endl;
}
}
getch();
return 0;
}
|
(1)Anjing (2)Kuda (3)Ikan (0)Keluar: 1
konstruktor Binatang ...
konstruktor Mammal ...
konstruktor Anjing ...
Guk Guk!...
Anjing makan...
Anjing bereproduksi ...
Anjing berlari...
Anjing mengorok...
destruktor Anjing ...
destruktor Mammal ...
destruktor Binatang ...
(1)Anjing (2)Kuda (3)Ikan (0)Keluar: 2
konstruktor Binatang ...
konstruktor Mammal ...
konstruktor Kuda ...
Mengeluh!...
Kuda makan...
Reproduksi Mammal reproduction ...
Kuda berlari...
Kuda mengorok...
destruktor Kuda ...
destruktor Mammal ...
destruktor Binatang ...
(1)Anjing (2)Kuda (3)Ikan (0)Keluar: 3
konstruktor Binatang ...
konstruktor Ikan ...
Ikan makan...
Ikan bertelur...
Ikan berenang...
Ikan mengorok...
destruktor Ikan ...
destruktor Binatang ...
(1)Anjing (2)Kuda (3)Ikan (0)Keluar:
No comments:
Post a Comment