FUNGSI LANJUT
Soal & Penyelesaian
1.
Tulislah sebuah program C++ untuk mendemonstrasikan fungsi-fungsi
teroverload.
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
|
//FungsiTeroverload.cpp
#include <conio.h>
#include <iostream>
// deklarasi kelas PersegiPanjang
class PersegiPanjang
{
public:
// konstruktor
PersegiPanjang(int lebar, int
tinggi);
~PersegiPanjang(){}
// fungsi-fungsi teroverload
void
GambarBangun() const;
void
GambarBangun(int aLebar, int aTinggi) const;
private:
int
lebarNya;
int
tinggiNya;
};
//implementasi konstruktor
PersegiPanjang::PersegiPanjang(int lebar, int tinggi)
{
lebarNya = lebar;
tinggiNya = tinggi;
}
// GambarBangun
teroverload, tanpa parameter
// menggambar berdasarkan nilai-nilai
anggota kelas skrg
void PersegiPanjang::GambarBangun() const
{
GambarBangun( lebarNya, tinggiNya);
}
// GambarBangun
teroverload dengan dua parameter
// menggambar berdasarkan
dua parameter tersebut
void PersegiPanjang::GambarBangun(int lebar, int tinggi) const
{
for
(int i = 0; i<tinggi; i++)
{
for
(int j = 0; j< lebar; j++)
{
std::cout << "*";
}
std::cout << std::endl;
}
}
// program untuk
mendemonstrasikan fungsi-fungsi teroverload
int main()
{
// menginisialisasi sebuah persegipanjang
dengan 30,5
PersegiPanjang persegiPanjang(30,5);
std::cout << "GambarBangun():" <<
std::endl;
persegiPanjang.GambarBangun();
std::cout << "\nGambarBangun(40,2):" <<
std::endl;
persegiPanjang.GambarBangun(40,2);
getch();
return
0;
}
|
GambarBangun():
******************************
******************************
******************************
******************************
******************************
GambarBangun(40,2):
****************************************
****************************************
2.
Sama seperti fungsi global yang dapat memiliki satu
atau lebih nilai default, setiap fungsi anggota kelas juga dapat memilikinya.
Demonstrasikanlah hal ini dalam sebuah program C++.
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
|
//NilaiDefaultFungsiAnggota.cpp
#include <conio.h>
#include <iostream>
using namespace std;
// deklarasi kelas
PersegiPanjang
class PersegiPanjang
{
public:
// konstruktor
PersegiPanjang(int lebar, int
tinggi);
~PersegiPanjang(){}
void
GambarBangun(int aLebar, int
aTinggi,
bool
GunakanNilSkrg = false) const;
private:
int
lebarNya;
int
tinggiNya;
};
//implementasi konstruktor
PersegiPanjang::PersegiPanjang(int lebar, int tinggi):
lebarNya(lebar),
tinggiNya(tinggi)
{}
// nilai-nilai default
digunakan untuk parameter ketiga
void PersegiPanjang::GambarBangun(
int lebar,
int tinggi,
bool GunakanNilSkrg
) const
{
int
tampilLebar;
int
tampilTinggi;
if
(GunakanNilSkrg == true)
{
tampilLebar = lebarNya;
tampilTinggi = tinggiNya;
}
else
{
tampilLebar = lebar;
tampilTinggi = tinggi;
}
for
(int i = 0; i<tampilTinggi;
i++)
{
for
(int j = 0; j< tampilLebar;
j++)
{
cout << "*";
}
cout << endl;
}
}
// program penguji
int main()
{
// menginsialisasi dengan 30,5
PersegiPanjang persegiPanjang(30,5);
cout << "GambarBangun(0,0,true)..." << endl;
persegiPanjang.GambarBangun(0,0,true);
cout <<"GambarBangun(40,2)..." << endl;
persegiPanjang.GambarBangun(40,2);
getch();
return 0;
}
|
GambarBangun(0,0,true)...
******************************
******************************
******************************
******************************
******************************
GambarBangun(40,2)...
****************************************
****************************************
3.
Tulislah sebuah program C++ untuk mendemonstrasikan
bagaimana mengoverload konstruktor.
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
|
//OverloadKonstruktor.cpp
#include <iostream>
#include <conio.h>
using namespace std;
class PersegiPanjang
{
public:
PersegiPanjang();
PersegiPanjang(int lebar, int
panjang);
~PersegiPanjang() {}
int
GetLebar() const { return
lebarNya; }
int
GetPanjang() const { return
panjangNya; }
private:
int
lebarNya;
int
panjangNya;
};
PersegiPanjang::PersegiPanjang()
{
lebarNya = 5;
panjangNya = 10;
}
PersegiPanjang::PersegiPanjang
(int lebar, int panjang)
{
lebarNya = lebar;
panjangNya = panjang;
}
int main()
{
PersegiPanjang PPanjang1;
cout << "Lebar PPanjang1:
" << PPanjang1.GetLebar() << endl;
cout << "Panjang PPanjang1:
" << PPanjang1.GetPanjang() << endl;
int
aLebar, aPanjang;
cout << "Masukkan lebar:
";
cin >> aLebar;
cout << "\nMasukkan panjang:
";
cin >> aPanjang;
PersegiPanjang PPanjang2(aLebar,
aPanjang);
cout << "\nLebar PPanjang2: "
<< PPanjang2.GetLebar() << endl;
cout << "Tinggi PPanjang2: "
<< PPanjang2.GetPanjang() << endl;
getch();
return
0;
}
|
Lebar PPanjang1: 5
Panjang PPanjang1: 10
Masukkan lebar: 15
Masukkan panjang: 25
Lebar PPanjang2: 15
Tinggi PPanjang2: 25
4.
Demonstrasikanlah penggunaan dari konstruktor
penyalin.
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
|
//KonstruktorPenyalin.cpp
#include <iostream>
#include <conio.h>
using namespace std;
class Kucing
{
public:
Kucing(); // konstruktor default
Kucing (const Kucing &); // konstruktor penyalin
~Kucing(); // destruktor
int
GetUmur() const { return *umurNya; }
int
GetBerat() const { return *beratNya; }
void
SetUmur(int umur) { *umurNya =
umur; }
private:
int
*umurNya;
int
*beratNya;
};
Kucing::Kucing()
{
umurNya = new int;
beratNya = new int;
*umurNya = 5;
*beratNya = 9;
}
Kucing::Kucing(const Kucing & rhs)
{
umurNya = new int;
beratNya = new int;
*umurNya = rhs.GetUmur(); // akses publik
*beratNya = *(rhs.beratNya); // akses
private
}
Kucing::~Kucing()
{
delete
umurNya;
umurNya = 0;
delete
beratNya;
beratNya = 0;
}
int main()
{
Kucing Meonk;
cout << "Umur Meonk: " << Meonk.GetUmur() << endl;
cout << "Penetapan Meonk menjadi 6...\n";
Meonk.SetUmur(6);
cout << "Menciptakan Meink dari Meonk\n";
Kucing Meink(Meonk);
cout << "Umur Meonk: " << Meonk.GetUmur() << endl;
cout << "Umur Meink: " << Meink.GetUmur() << endl;
cout << "Penetapan Meonk menjadi 7...\n";
Meonk.SetUmur(7);
cout << "Umur Meonk: " << Meonk.GetUmur() << endl;
cout << "Umur Meink: " << Meink.GetUmur() << endl;
getch();
return
0;
}
|
Umur Meonk: 5
Penetapan Meonk menjadi 6...
Menciptakan Meink dari Meonk
Umur Meonk: 6
Umur Meink: 6
Penetapan Meonk menjadi 7...
Umur Meonk: 7
Umur Meink: 6
5.
Demonstrasikanlah bagaimana mengoverload operator++
dalam sebuah program C++.
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
|
//OverloadOperator++.cpp
#include <iostream>
#include <conio.h>
using namespace std;
class Kounter
{
public:
Kounter();
~Kounter(){}
int
GetNilai()const { return nilaiNya;
}
void
SetNilai(int x) {nilaiNya = x; }
void
Inkremen() { ++nilaiNya; }
void
operator++ () { ++nilaiNya; }
private:
int
nilaiNya;
};
Kounter::Kounter():
nilaiNya(0)
{}
int main()
{
Kounter i;
cout << "Nilai dari i adalah " << i.GetNilai() << endl;
i.Inkremen();
cout << "Nilai dari i adalah " << i.GetNilai() << endl;
++i;
cout << "Nilai dari i adalah
" << i.GetNilai() << endl;
getch();
return
0;
}
|
Nilai dari i adalah 0
Nilai dari i adalah 1
Nilai dari i adalah 2
6.
Demonstrasikanlah tipe nilai balik pada fungsi
operator teroverload dalam sebuah program C++.
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
|
//NilaiBalikOperatorTeroverload.cpp
#include <iostream>
#include <conio.h>
using namespace std;
class Kounter
{
public:
Kounter();
~Kounter(){}
int
GetNilai()const { return nilaiNya; }
void
SetNilai(int x) {nilaiNya = x; }
void
Inkremen() { ++nilaiNya; }
Kounter operator++ ();
private:
int
nilaiNya;
};
Kounter::Kounter():
nilaiNya(0)
{}
Kounter
Kounter::operator++()
{
++nilaiNya;
Kounter temp;
temp.SetNilai(nilaiNya);
return temp;
}
int main()
{
Kounter i;
cout << "Nilai dari i adalah " << i.GetNilai() << endl;
i.Inkremen();
cout << "Nilai dari i adalah " << i.GetNilai() << endl;
++i;
cout << "Nilai dari i adalah " << i.GetNilai() << endl;
Kounter a = ++i;
cout << "Nilai dari a " << a.GetNilai();
cout << " dan i adalah " << i.GetNilai() << endl;
getch();
return
0;
}
|
Nilai dari i adalah 0
Nilai dari i adalah 1
Nilai dari i adalah 2
Nilai dari a 3 dan i adalah 3
7.
Anda bisa tidak memberikan nama pada objek temporer
pada baris 27 pada kode sebelumnya. Jika Kounter
memiliki sebuah konstruktor dengan satu parameter, Anda hanya perlu menjadikan
hasil dari konstruktor tersebut sebagai nilai balik dari operator inkremen.
Demonstrasikanlah ide tersebut.
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
|
//ObjekTanpaNama.cpp
#include <iostream>
#include <conio.h>
using namespace std;
class Kounter
{
public:
Kounter();
Kounter(int nil);
~Kounter(){}
int
GetNilai()const { return nilaiNya; }
void
SetNilai(int x) {nilaiNya = x; }
void
Inkremen() { ++nilaiNya; }
Kounter operator++ ();
private:
int
nilaiNya;
};
Kounter::Kounter():
nilaiNya(0)
{}
Kounter::Kounter(int nil):
nilaiNya(nil)
{}
Kounter
Kounter::operator++()
{
++nilaiNya;
return
Kounter(nilaiNya);
}
int main()
{
Kounter i;
cout << "Nilai dari i adalah " << i.GetNilai() << endl;
i.Inkremen();
cout << "Nilai dari i adalah " << i.GetNilai() << endl;
++i;
cout << "Nilai dari i adalah " << i.GetNilai() << endl;
Kounter a = ++i;
cout << "Nilai dari a " << a.GetNilai();
cout << " dan i adalah " << i.GetNilai() << endl;
getch();
return
0;
}
|
Nilai dari i adalah 0
Nilai dari i adalah 1
Nilai dari i adalah 2
Nilai dari a 3 dan i adalah 3
8.
Demonstrasikanlah penggunaan pointer this dalam sebuah program C++.
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
|
//menggunakanThis.cpp
#include <iostream>
#include <conio.h>
using namespace std;
class Kounter
{
public:
Kounter();
~Kounter(){}
int
GetNilai()const { return nilaiNya; }
void
SetNilai(int x) {nilaiNya = x; }
void
Inkremen() { ++nilaiNya; }
const
Kounter& operator++ ();
private:
int
nilaiNya;
};
Kounter::Kounter():
nilaiNya(0)
{}
const Kounter& Kounter::operator++()
{
++nilaiNya;
return
*this;
}
int main()
{
Kounter i;
cout << "Nilai dari i adalah " << i.GetNilai() << endl;
i.Inkremen();
cout << "Nilai dari i adalah " << i.GetNilai() << endl;
++i;
cout << "Nilai dari i adalah " << i.GetNilai() << endl;
Kounter a = ++i;
cout << "Nilai dari a " << a.GetNilai();
cout << " dan i adalah "
<< i.GetNilai() << endl;
getch();
return
0;
}
|
Nilai dari i adalah 0
Nilai dari i adalah 1
Nilai dari i adalah 2
Nilai dari a 3 dan i adalah 3
9. Demonstrasikanlah
bagaimana mengoverload operator prefiks dan posfiks.
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
|
//OverloadPrefiksPostfiks.cpp
#include <iostream>
#include <conio.h>
using namespace std;
class Kounter
{
public:
Kounter();
~Kounter(){}
int
GetNilai()const { return nilaiNya; }
void
SetNilai(int x) {nilaiNya = x; }
void
Inkremen() { ++nilaiNya; }
const
Kounter& operator++ (); //prefiks
const
Kounter operator++ (int); // postfiks
private:
int
nilaiNya;
};
Kounter::Kounter():
nilaiNya(0)
{}
const Kounter& Kounter::operator++()
{
++nilaiNya;
return
*this;
}
const Kounter Kounter::operator++(int bendera)
{
Kounter temp(*this);
++nilaiNya;
return
temp;
}
int main()
{
Kounter i;
cout << "Nilai dari i adalah " << i.GetNilai() << endl;
++i;
cout << "Nilai dari i adalah " << i.GetNilai() << endl;
i++;
cout << "Nilai dari i adalah
" << i.GetNilai() << endl;
Kounter a = ++i;
cout << "Nilai dari a " << a.GetNilai();
cout << " dan i adalah " << i.GetNilai() << endl;
a = i++;
cout << "Nilai dari a " << a.GetNilai();
cout << " dan i adalah " << i.GetNilai() << endl;
getch();
return
0;
}
|
Nilai dari i adalah 0
Nilai dari i adalah 1
Nilai dari i adalah 2
Nilai dari a 3 dan i adalah 3
Nilai dari a 3 dan i adalah 4
10.
Tulislah sebuah fungsi, Tambah(), yang mengambil sebuah objek Kounter sebagai argumennya,
dan menambahkan nilainya, dan kemudian menghasilkan sebuah objek Kounter
sebagai nilai balik.
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
|
//TambahObjek.cpp
#include <iostream>
#include <conio.h>
using namespace std;
class Kounter
{
public:
Kounter();
Kounter(int nilaiAwal);
~Kounter(){}
int
GetNilai()const { return nilaiNya; }
void
SetNilai(int x) {nilaiNya = x; }
void
Inkremen() { ++nilaiNya; }
Kounter Tambah(const Kounter &);
private:
int
nilaiNya;
};
Kounter::Kounter(int nilaiAwal):
nilaiNya(nilaiAwal)
{}
Kounter::Kounter():
nilaiNya(0)
{}
Kounter Kounter::Tambah(const Kounter & rhs)
{
return Kounter(nilaiNya+
rhs.GetNilai());
}
int main()
{
Kounter varSatu(2), varDua(4), varTiga;
varTiga = varSatu.Tambah(varDua);
cout << "varSatu: " << varSatu.GetNilai()<< endl;
cout << "varDua: " << varDua.GetNilai() << endl;
cout << "varTiga: " << varTiga.GetNilai() << endl;
getch();
return
0;
}
|
varSatu: 2
varDua: 4
varTiga: 6
11.
Demonstrasikanlah bagaimana mengoverload operator+.
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
|
//OverloadOperator+.cpp
#include <iostream>
#include <conio.h>
using namespace std;
class Kounter
{
public:
Kounter();
Kounter(int nilaiAwal);
~Kounter(){}
int
GetNilai()const { return nilaiNya; }
void
SetNilai(int x) {nilaiNya = x; }
void
Inkremen() { ++nilaiNya; }
Kounter operator+ (const Kounter &);
private:
int
nilaiNya;
};
Kounter::Kounter(int nilaiAwal):
nilaiNya(nilaiAwal)
{}
Kounter::Kounter():
nilaiNya(0)
{}
Kounter Kounter::operator+
(const Kounter & rhs)
{
return
Kounter(nilaiNya + rhs.GetNilai());
}
int main()
{
Kounter varSatu(2), varDua(4), varTiga;
varTiga = varSatu + varDua;
cout << "varSatu: " << varSatu.GetNilai()<< endl;
cout << "varDua: " << varDua.GetNilai() << endl;
cout << "varTiga: " << varTiga.GetNilai() << endl;
getch();
return
0;
}
|
varSatu: 2
varDua: 4
varTiga: 6
12.
Demonstrasikanlah bagaimana mengoverload operator=.
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
|
//OperloadOperator=.cpp
#include <iostream>
#include <conio.h>
using namespace std;
class Kucing
{
public:
Kucing(); // konstruktor default
int
GetUmur() const { return *umurNya; }
int
GetBerat() const { return *beratNya; }
void
SetUmur(int umur) { *umurNya =
umur; }
Kucing & operator=(const
Kucing &);
private:
int
*umurNya;
int
*beratNya;
};
Kucing::Kucing()
{
umurNya = new int;
beratNya = new int;
*umurNya = 5;
*beratNya = 9;
}
Kucing &
Kucing::operator=(const Kucing
& rhs)
{
if
(this == &rhs)
return
*this;
*umurNya = rhs.GetUmur();
*beratNya = rhs.GetBerat();
return
*this;
}
int main()
{
Kucing Meonk;
cout << "Umur Meonk: " << Meonk.GetUmur() << endl;
cout << "Penetapan Meonk menjadi 6...\n";
Meonk.SetUmur(6);
Kucing Meink;
cout << "Umur Meink: " << Meink.GetUmur() << endl;
cout << "Salin Meonk ke Meink...\n";
Meink = Meonk;
cout << "Umur Meink: "
<< Meink.GetUmur() << endl;
getch();
return
0;
}
|
Umur Meonk: 5
Penetapan Meonk menjadi 6...
Umur Meink: 5
Salin Meonk ke Meink...
Umur Meink: 6
No comments:
Post a Comment