FUNGSI DAN KELAS SPESIAL
Soal & Penyelesaian
1.
Tulislah sebuah program C++ dimana di dalamnya
terdapat anggota data statis.
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
|
//anggotaDataStatis.cpp
#include <iostream>
#include <conio.h>
using namespace std;
class Kucing
{
public:
Kucing(int umur):umurNya(umur){BrpBanyakKucing++; }
virtual
~Kucing() { BrpBanyakKucing--; }
virtual
int GetUmur() { return umurNya; }
virtual
void SetUmur(int umur) { umurNya = umur; }
static
int BrpBanyakKucing;
private:
int
umurNya;
};
int Kucing::BrpBanyakKucing = 0;
int main()
{
const
int KucingMaks = 5; int i;
Kucing *RumahKucing[KucingMaks];
for
(i = 0; i < KucingMaks; i++)
RumahKucing[i] = new Kucing(i);
for
(i = 0; i < KucingMaks; i++)
{
cout << "Terdapat ";
cout <<
Kucing::BrpBanyakKucing;
cout << " kucing!" << endl;
cout << "Menghapus kucing yang berumur ";
cout <<
RumahKucing[i]->GetUmur();
cout << " tahun" << endl;
delete
RumahKucing[i];
RumahKucing[i] = 0;
}
getch();
return
0;
}
|
Terdapat 5 kucing!
Menghapus kucing yang berumur 0 tahun
Terdapat 4 kucing!
Menghapus kucing yang berumur 1 tahun
Terdapat 3 kucing!
Menghapus kucing yang berumur 2 tahun
Terdapat 2 kucing!
Menghapus kucing yang berumur 3 tahun
Terdapat 1 kucing!
Menghapus kucing yang berumur 4 tahun
2. Demonstrasikanlah
bagaimana mengakses anggota statis tanpa adanya objek.
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
|
//anggotaStatisTanpaObjek.cpp
#include <iostream>
#include <conio.h>
using namespace std;
class Kucing
{
public:
Kucing(int umur):umurNya(umur){BrpBanyakKucing++; }
virtual
~Kucing() { BrpBanyakKucing--; }
virtual
int GetUmur() { return umurNya; }
virtual
void SetUmur(int umur) { umurNya = umur; }
static
int BrpBanyakKucing;
private:
int
umurNya;
};
int Kucing::BrpBanyakKucing = 0;
void FungsiTelepati();
int main()
{
const
int KucingMaks = 5; int i;
Kucing *RumahKucing[KucingMaks];
for
(i = 0; i < KucingMaks; i++)
{
RumahKucing[i] = new Kucing(i);
FungsiTelepati();
}
for
(i = 0; i < KucingMaks; i++)
{
delete
RumahKucing[i];
FungsiTelepati();
}
getch();
return
0;
}
void FungsiTelepati()
{
cout << "Terdapat ";
cout << Kucing::BrpBanyakKucing
<< " kucing hidup!" << endl;
}
|
Terdapat 1 kucing hidup!
Terdapat 2 kucing hidup!
Terdapat 3 kucing hidup!
Terdapat 4 kucing hidup!
Terdapat 5 kucing hidup!
Terdapat 4 kucing hidup!
Terdapat 3 kucing hidup!
Terdapat 2 kucing hidup!
Terdapat 1 kucing hidup!
Terdapat 0 kucing hidup!
3. Demonstrasikanlah
pengaksesan anggota statis menggunakan fungsi anggota tak-statis.
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
|
//fungsiAnggotaTakStatis.cpp
#include <iostream>
#include <conio.h>
using namespace std;
class Kucing
{
public:
Kucing(int umur):umurNya(umur){BrpBanyakKucing++; }
virtual
~Kucing() { BrpBanyakKucing--; }
virtual
int GetUmur() { return umurNya; }
virtual
void SetUmur(int umur) { umurNya = umur; }
virtual
int GetBerapaBanyak() { return BrpBanyakKucing; }
private:
int
umurNya;
static
int BrpBanyakKucing;
};
int Kucing::BrpBanyakKucing = 0;
int main()
{
const
int KucingMaks = 5; int i;
Kucing *RumahKucing[KucingMaks];
for
(i = 0; i < KucingMaks; i++)
RumahKucing[i] = new Kucing(i);
for
(i = 0; i < KucingMaks; i++)
{
cout << "Terdapat ";
cout <<
RumahKucing[i]->GetBerapaBanyak();
cout << " kucing!" << endl;
cout << "Menghapus kucing yang berumur ";
cout <<
RumahKucing[i]->GetUmur()+2;
cout << " tahun"
<< endl;
delete
RumahKucing[i];
RumahKucing[i] = 0;
}
getch();
return
0;
}
|
Terdapat 5 kucing!
Menghapus kucing yang berumur 2 tahun
Terdapat 4 kucing!
Menghapus kucing yang berumur 3 tahun
Terdapat 3 kucing!
Menghapus kucing yang berumur 4 tahun
Terdapat 2 kucing!
Menghapus kucing yang berumur 5 tahun
Terdapat 1 kucing!
Menghapus kucing yang berumur 6 tahun
4. Demonstrasikanlah
penggunaan fungsi anggota statis.
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
|
//fungsiAnggotaStatis.cpp
#include <iostream>
#include <conio.h>
using namespace std;
class Kucing
{
public:
Kucing(int umur):umurNya(umur){BrpBanyakKucing++; }
virtual
~Kucing() { BrpBanyakKucing--; }
virtual
int GetUmur() { return umurNya; }
virtual
void SetUmur(int umur) { umurNya = umur; }
static
int GetBerapaBanyak() { return BrpBanyakKucing; }
private:
int
umurNya;
static
int BrpBanyakKucing;
};
int Kucing::BrpBanyakKucing = 0;
void FungsiTelepati();
int main()
{
const
int KucingMaks = 5; int i;
Kucing *RumahKucing[KucingMaks];
for
(i = 0; i < KucingMaks; i++)
{
RumahKucing[i] = new Kucing(i);
FungsiTelepati();
}
for
(i = 0; i < KucingMaks; i++)
{
delete
RumahKucing[i];
FungsiTelepati();
}
getch();
return
0;
}
void FungsiTelepati()
{
cout << "Terdapat ";
cout << Kucing::GetBerapaBanyak()
<< " kucing hidup!"
<< endl;
}
|
Terdapat 1 kucing hidup!
Terdapat 2 kucing hidup!
Terdapat 3 kucing hidup!
Terdapat 4 kucing hidup!
Terdapat 5 kucing hidup!
Terdapat 4 kucing hidup!
Terdapat 3 kucing hidup!
Terdapat 2 kucing hidup!
Terdapat 1 kucing hidup!
Terdapat 0 kucing hidup!
5. Demonstrasikanlah
penggunaan pointer ke fungsi.
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
|
//pointerKeFungsi.cpp
#include
<iostream>
#include
<conio.h>
using namespace std;
void Kuadrat (int&,int&);
void Kubik (int&, int&);
void Tukar (int&, int&);
void GetNilai(int&, int&);
void TampilNilai(int, int);
int main()
{
void (* pFungsi) (int &, int &);
bool fKeluar = false;
int nilSatu=1,
nilDua=2;
int pilihan;
while (fKeluar == false)
{
cout <<
"(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: ";
cin >>
pilihan;
switch (pilihan)
{
case 1: pFungsi = GetNilai; break;
case 2: pFungsi = Kuadrat; break;
case 3: pFungsi = Kubik; break;
case 4: pFungsi = Tukar; break;
default: fKeluar = true; break;
}
if (fKeluar == false)
{
TampilNilai(nilSatu, nilDua);
pFungsi(nilSatu, nilDua);
TampilNilai(nilSatu, nilDua);
}
}
getch();
return 0;
}
void TampilNilai(int x, int y)
{
cout <<
"x: " << x
<< " y: " <<
y << endl;
}
void Kuadrat (int & rX, int
& rY)
{
rX *= rX;
rY *= rY;
}
void Kubik (int & rX, int
& rY)
{
int tmp;
tmp = rX;
rX *= rX;
rX = rX * tmp;
tmp = rY;
rY *= rY;
rY = rY * tmp;
}
void Tukar(int & rX, int
& rY)
{
int temp;
temp = rX;
rX = rY;
rY = temp;
}
void GetNilai (int & rNilaiSatu, int
& rNilaiDua)
{
cout <<
"Nilai baru untuk nilSatu:
";
cin >>
rNilaiSatu;
cout <<
"Nilai baru untuk nilDua:
";
cin >>
rNilaiDua;
}
|
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: 1
x: 1 y: 2
Nilai baru untuk nilSatu: 12
Nilai baru untuk nilDua: 17
x: 12 y: 17
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: 2
x: 12 y: 17
x: 144 y: 289
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: 3
x: 144 y: 289
x: 2985984 y: 24137569
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: 4
x: 2985984 y: 24137569
x: 24137569 y: 2985984
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar:
6. Konversilah kode pada
soal nomor 5 sehingga tidak perlu menggunakan pointer ke fungsi.
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
|
//tanpaPointerKeFungsi.cpp
#include <iostream>
#include <conio.h>
using namespace std;
void Kuadrat (int&,int&);
void Kubik (int&,
int&);
void Tukar (int&,
int&);
void GetNilai(int&,
int&);
void TampilNilai(int,
int);
int main()
{
bool
fKeluar = false;
int
nilSatu=1, nilDua=2;
int
pilihan;
while
(fKeluar == false)
{
cout <<
"(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik (4)Tukar: ";
cin >> pilihan;
switch
(pilihan)
{
case 1:
TampilNilai(nilSatu, nilDua);
GetNilai(nilSatu, nilDua);
TampilNilai(nilSatu, nilDua);
break;
case 2:
TampilNilai(nilSatu, nilDua);
Kuadrat(nilSatu,nilDua);
TampilNilai(nilSatu, nilDua);
break;
case 3:
TampilNilai(nilSatu,
nilDua);
Kubik(nilSatu, nilDua);
TampilNilai(nilSatu,
nilDua);
break;
case
4:
TampilNilai(nilSatu, nilDua);
Tukar(nilSatu, nilDua);
TampilNilai(nilSatu, nilDua);
break;
default: fKeluar = true; break;
}
}
getch();
return
0;
}
void TampilNilai(int
x, int y)
{
cout << "x: " << x << " y: " << y << endl;
}
void Kuadrat (int
& rX, int & rY)
{
rX *= rX;
rY *= rY;
}
void Kubik (int
& rX, int & rY)
{
int
tmp;
tmp = rX;
rX *= rX;
rX = rX * tmp;
tmp = rY;
rY *= rY;
rY = rY * tmp;
}
void Tukar(int &
rX, int & rY)
{
int
temp;
temp = rX;
rX = rY;
rY = temp;
}
void GetNilai (int
& rNilaiSatu, int &
rNilaiDua)
{
cout << "Nilai baru untuk nilSatu: ";
cin >> rNilaiSatu;
cout << "Nilai baru untuk nilDua: ";
cin >> rNilaiDua;
}
|
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: 1
x: 1 y: 2
Nilai baru untuk nilSatu: 12
Nilai baru untuk nilDua: 13
x: 12 y: 13
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: 2
x: 12 y: 13
x: 144 y: 169
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: 3
x: 144 y: 169
x: 2985984 y: 4826809
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: 4
x: 2985984 y: 4826809
x: 4826809 y: 2985984
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar:
7. Demonstrasikanlah
penggunaan array pointer ke fungsi.
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
|
//arrayPointerKeFungsi.cpp
#include <iostream>
#include <conio.h>
using namespace std;
void Kuadrat (int&,int&);
void Kubik (int&,
int&);
void Tukar (int&,
int&);
void GetNilai(int&,
int&);
void TampilNilai(int,
int);
int main()
{
int
nilSatu=1, nilDua=2;
int
pilihan, i;
const
int ArrayMaks = 5;
void
(*pArrayFungsi[ArrayMaks])(int&,
int&);
for
(i=0; i < ArrayMaks; i++)
{
cout <<"(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik (4)Tukar: ";
cin >> pilihan;
switch
(pilihan)
{
case 1: pArrayFungsi[i] = GetNilai; break;
case 2: pArrayFungsi[i] = Kuadrat; break;
case 3: pArrayFungsi[i] = Kubik; break;
case 4: pArrayFungsi[i] = Tukar; break;
default: pArrayFungsi[i] = 0;
}
}
for
(i=0; i < ArrayMaks; i++)
{
if
( pArrayFungsi[i] == 0 )
continue;
pArrayFungsi[i](nilSatu,nilDua);
TampilNilai(nilSatu,nilDua);
}
getch();
return
0;
}
void TampilNilai(int
x, int y)
{
cout << "x: " << x << " y: " << y << endl;
}
void Kuadrat (int
& rX, int & rY)
{
rX *= rX;
rY *= rY;
}
void Kubik (int
& rX, int & rY)
{
int
tmp;
tmp = rX;
rX *= rX;
rX = rX * tmp;
tmp = rY;
rY *= rY;
rY = rY * tmp;
}
void Tukar(int &
rX, int & rY)
{
int
temp;
temp = rX;
rX = rY;
rY = temp;
}
void GetNilai (int
& rNilaiSatu, int &
rNilaiDua)
{
cout << "Nilai baru untuk nilSatu: ";
cin >> rNilaiSatu;
cout << "Nilai baru untuk nilDua: ";
cin >> rNilaiDua;
}
|
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: 1
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: 2
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: 3
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: 4
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: 1
Nilai baru untuk nilSatu: 12
Nilai baru untuk nilDua: 13
x: 12 y: 13
x: 144 y: 169
x: 2985984 y: 4826809
x: 4826809 y: 2985984
Nilai baru untuk nilSatu:
8. Demonstrasikanlah
pelewatan pointer ke fungsi kepada fungsi lain.
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
|
//pelewatanPointerKeFungsi.cpp
#include <iostream>
#include <conio.h>
using namespace std;
void Kuadrat (int&,int&);
void Kubik (int&,
int&);
void Tukar (int&,
int&);
void GetNilai(int&,
int&);
void TampilNilai(void
(*)(int&, int&),int&, int&);
int main()
{
int
nilSatu=1, nilDua=2;
int
pilihan, i;
bool
fKeluar = false;
void
(*pFungsi)(int&, int&);
while
(fKeluar == false)
{
cout <<"(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik (4)Tukar: ";
cin >> pilihan;
switch
(pilihan)
{
case 1: pFungsi = GetNilai; break;
case 2: pFungsi = Kuadrat; break;
case 3: pFungsi = Kubik; break;
case 4: pFungsi = Tukar; break;
default: fKeluar = true; break;
}
if
(fKeluar == false)
TampilNilai ( pFungsi, nilSatu,
nilDua);
}
getch();
return
0;
}
void TampilNilai(void
(*pFungsi)(int&, int&), int& x, int&
y)
{
cout << "x: " << x << " y: " << y << endl;
pFungsi(x,y);
cout << "x: " << x << " y: " << y << endl;
}
void Kuadrat (int
& rX, int & rY)
{
rX *= rX;
rY *= rY;
}
void Kubik (int
& rX, int & rY)
{
int
tmp;
tmp = rX;
rX *= rX;
rX = rX * tmp;
tmp = rY;
rY *= rY;
rY = rY * tmp;
}
void Tukar(int &
rX, int & rY)
{
int
temp;
temp = rX;
rX = rY;
rY = temp;
}
void GetNilai (int
& rNilaiSatu, int &
rNilaiDua)
{
cout << "Nilai baru untuk nilSatu: ";
cin >> rNilaiSatu;
cout << "Nilai baru untuk nilDua: ";
cin >> rNilaiDua;
}
|
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: 1
x: 1 y: 2
Nilai baru untuk nilSatu: 12
Nilai baru untuk nilDua: 13
x: 12 y: 13
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: 2
x: 12 y: 13
x: 144 y: 169
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: 3
x: 144 y: 169
x: 2985984 y: 4826809
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: 4
x: 2985984 y: 4826809
x: 4826809 y: 2985984
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar:
9. Demonstrasikanlah
penggunaan typedef pada pointer ke
fungsi.
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
|
//typedefPointerKeFungsi.cpp
#include <iostream>
#include <conio.h>
using namespace std;
void Kuadrat (int&,int&);
void Kubik (int&,
int&);
void Tukar (int&,
int&);
void GetNilai(int&,
int&);
typedef void (*VPF) (int&, int&) ;
void TampilNilai(VPF, int&,
int&);
int main()
{
int
nilSatu=1, nilDua=2;
int
pilihan, i;
bool
fKeluar = false;
VPF pFungsi;
while
(fKeluar == false)
{
cout <<"(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik (4)Tukar: ";
cin >> pilihan;
switch
(pilihan)
{
case 1: pFungsi = GetNilai; break;
case 2: pFungsi = Kuadrat; break;
case 3: pFungsi = Kubik; break;
case 4: pFungsi = Tukar; break;
default: fKeluar = true;
break;
}
if
(fKeluar == false)
TampilNilai ( pFungsi, nilSatu,
nilDua);
}
getch();
return
0;
}
void TampilNilai(VPF pFungsi, int& x, int&
y)
{
cout << "x: " << x << " y: " << y << endl;
pFungsi(x,y);
cout << "x: " << x << " y: " << y << endl;
}
void Kuadrat (int
& rX, int & rY)
{
rX *= rX;
rY *= rY;
}
void Kubik (int
& rX, int & rY)
{
int
tmp;
tmp = rX;
rX *= rX;
rX = rX * tmp;
tmp = rY;
rY *= rY;
rY = rY * tmp;
}
void Tukar(int &
rX, int & rY)
{
int
temp;
temp = rX;
rX = rY;
rY = temp;
}
void GetNilai (int
& rNilaiSatu, int &
rNilaiDua)
{
cout << "Nilai baru untuk nilSatu: ";
cin >> rNilaiSatu;
cout << "Nilai baru untuk nilDua: ";
cin >> rNilaiDua;
}
|
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: 1
x: 1 y: 2
Nilai baru untuk nilSatu: 12
Nilai baru untuk nilDua: 13
x: 12 y: 13
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: 2
x: 12 y: 13
x: 144 y: 169
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: 3
x: 144 y: 169
x: 2985984 y: 4826809
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar: 4
x: 2985984 y: 4826809
x: 4826809 y: 2985984
(0)Keluar (1)Ubah Nilai (2)Kuadrat (3)Kubik
(4)Tukar:
10. Demonstrasikanlah
penggunaan pointer ke fungsi anggota.
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
|
//pointerKeFungsiAnggota.cpp
#include <iostream>
#include <conio.h>
using namespace std;
class Mammal
{
public:
Mammal():umurNya(1) { }
virtual
~Mammal() { }
virtual
void Bicara() const = 0;
virtual
void Bergerak() const = 0;
protected:
int
umurNya;
};
class Anjing : public
Mammal
{
public:
void
Bicara()const { cout << "Guk
Guk!" << endl; }
void
Bergerak() const { cout << "Berjalan
melenggok..." << endl; }
};
class Kucing : public
Mammal
{
public:
void
Bicara()const { cout << "Meonk
Meonk!" << endl; }
void
Bergerak() const { cout << "Berlari..."
<< endl; }
};
class Kuda : public
Mammal
{
public:
void
Bicara()const { cout <<
"Husshhhaaa!" <<
endl; }
void
Bergerak() const { cout <<
"Berlari kencang..." << endl; }
};
int main()
{
void
(Mammal::*pFungsi)() const = 0;
Mammal* ptr =0;
int
Binatang;
int
Metode;
bool
fKeluar = false;
while
(fKeluar == false)
{
cout << "(0)Keluar (1)Anjing (2)Kucing (3)Kuda: ";
cin >> Binatang;
switch
(Binatang)
{
case 1: ptr = new
Anjing; break;
case 2: ptr = new
Kucing; break;
case 3: ptr = new
Kuda; break;
default: fKeluar = true;
break;
}
if
(fKeluar == false)
{
cout << "(1)Bicara (2)Bergerak: ";
cin >> Metode;
switch (Metode)
{
case 1: pFungsi = &Mammal::Bicara; break;
case 2: pFungsi = &Mammal::Bergerak; break;
}
(ptr->*pFungsi)();
delete ptr;
}
}
getch();
return 0;
}
|
(0)Keluar (1)Anjing (2)Kucing (3)Kuda: 1
(1)Bicara (2)Bergerak: 1
Guk Guk!
(0)Keluar (1)Anjing (2)Kucing (3)Kuda: 2
(1)Bicara (2)Bergerak: 2
Berlari...
(0)Keluar (1)Anjing (2)Kucing (3)Kuda: 3
(1)Bicara (2)Bergerak: 1
Husshhhaaa!
(0)Keluar (1)Anjing (2)Kucing (3)Kuda:
11. Demonstrasikanlah
penggunaan array pointer ke fungsi anggota.
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
|
//arrayPointerKeFungsiAnggota.cpp
#include <iostream>
#include <conio.h>
using std::cout;
using std::endl;
class Anjing
{
public:
void
Bicara()const { cout <<
"Guk Guk!" <<
endl; }
void
Bergerak() const { cout <<
"Mencari perhatian..." << endl; }
void
Makan() const { cout <<
"Menelan makanan..." << endl; }
void
Mengendus() const { cout <<
"Shhhgrrgrg" <<
endl; }
void
Mengeluh() const { cout <<
"Mengeluh..." <<
endl; }
void
Berguling() const { cout <<
"Berguling-guling..." << endl; }
void
Pura_PuraMati() const
{ cout << "Bermain pura-pura mati" << endl; }
};
typedef void
(Anjing::*PDF)()const ;
int main()
{
const
int FungsiMaks = 7;
PDF FungsiAnjing[FungsiMaks] =
{&Anjing::Bicara,
&Anjing::Bergerak,
&Anjing::Makan,
&Anjing::Mengendus,
&Anjing::Mengeluh,
&Anjing::Berguling,
&Anjing::Pura_PuraMati };
Anjing* pAnjing =0;
int
Metode;
bool
fKeluar = false;
while
(!fKeluar)
{
cout << "(0)Keluar (1)Bicara (2)Bergerak (3)Makan
(4)Mengendus";
cout << " (5)Mengeluh (6)Berguling (7)Pura-Pura
Mati: ";
std::cin >> Metode;
if
(Metode <= 0 || Metode >= 8)
{
fKeluar = true;
}
else
{
pAnjing = new Anjing;
(pAnjing->*FungsiAnjing[Metode-1])();
delete pAnjing;
}
}
getch();
return 0;
}
|
(0)Keluar (1)Bicara (2)Bergerak (3)Makan
(4)Mengendus (5)Mengeluh (6)Berguling (7)Pura-Pura Mati: 1
Guk Guk!
(0)Keluar (1)Bicara (2)Bergerak (3)Makan
(4)Mengendus (5)Mengeluh (6)Berguling (7)Pura-Pura Mati: 2
Mencari perhatian...
(0)Keluar (1)Bicara (2)Bergerak (3)Makan
(4)Mengendus (5)Mengeluh (6)Berguling (7)Pura-Pura Mati: 3
Menelan makanan...
(0)Keluar (1)Bicara (2)Bergerak (3)Makan
(4)Mengendus (5)Mengeluh (6)Berguling (7)Pura-Pura Mati: 4
Shhhgrrgrg
(0)Keluar (1)Bicara (2)Bergerak (3)Makan
(4)Mengendus (5)Mengeluh (6)Berguling (7)Pura-Pura Mati: 5
Mengeluh...
(0)Keluar (1)Bicara (2)Bergerak (3)Makan
(4)Mengendus (5)Mengeluh (6)Berguling (7)Pura-Pura Mati: 6
Berguling-guling...
(0)Keluar (1)Bicara (2)Bergerak (3)Makan
(4)Mengendus (5)Mengeluh (6)Berguling (7)Pura-Pura Mati: 7
Bermain pura-pura mati
(0)Keluar (1)Bicara (2)Bergerak (3)Makan (4)Mengendus
(5)Mengeluh (6)Berguling (7)Pura-Pura Mati:0
No comments:
Post a Comment