Monday, December 26, 2016

Bab 7. Soal & Penyelesaian C++


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