PEWARISAN
Soal & Penyelesaian
1.
Tulislah sebuah program C++ untuk mendemonstrasikan mekanisme
pewarisan sederhana.
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
|
// pewarisanSederhana.cpp
#include <iostream>
using namespace std;
enum VARIETAS { GOLDEN, CAIRN, DANDIE, SHETLAND, DOBERMAN, LAB
};
class Mammal
{
public:
// konstruktor
Mammal();
~Mammal();
//aksesor
int
GetUmur() const;
void
SetUmur(int);
int
GetBerat() const;
void
SetBerat();
//metode-metode lain
void
Bicara() const;
void
Tidur() const;
protected:
int
umurNya;
int
beratNya;
};
class Anjing : public Mammal
{
public:
// konstruktor
Anjing();
~Anjing();
// aksesor
VARIETAS GetVarietas() const;
void
SetVarietas(VARIETAS);
// metode-metode lain
void
GoyangEkor();
void
MintaMakan();
protected:
VARIETAS varietasNya;
};
|
2. Ujilah mekanisme
pewarisan pada soal nomor 1 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
51
52
53
54
55
56
57
58
59
60
61
|
// ujiPewarisanSederhana.cpp
#include
<iostream>
#include
<conio.h>
using std::cout;
using std::endl;
enum VARIETAS { GOLDEN, CAIRN, DANDIE,
SHETLAND, DOBERMAN, LAB };
class Mammal
{
public:
// konstruktor
Mammal():umurNya(2), beratNya(5){}
~Mammal(){}
//aksesor
int GetUmur() const { return
umurNya; }
void SetUmur(int umur) { umurNya = umur; }
int GetBerat() const { return
beratNya; }
void SetBerat(int berat) { beratNya = berat; }
//metode-metode
lain
void Bicara() const { cout << "Suara
mammal!\n"; }
void Tidur() const { cout << "shhh.
Saya sedang tidur.\n"; }
protected:
int umurNya;
int beratNya;
};
class Anjing : public Mammal
{
public:
// konstruktor
Anjing():varietasNya(GOLDEN){}
~Anjing(){}
// aksesor
VARIETAS
GetVarietas() const { return varietasNya; }
void SetVarietas(VARIETAS varietas) {
varietasNya = varietas; }
// metode-metode
lain
void GoyangEkor() const { cout << "Ekor bergoyang-goyang...\n"; }
void MintaMakan() const { cout << "Meminta makanan...\n"; }
protected:
VARIETAS
varietasNya;
};
int main()
{
Anjing Fido;
Fido.Bicara();
Fido.GoyangEkor();
cout <<
"Fido berusia " <<
Fido.GetUmur() << " tahun"
<< endl;
getch();
return 0;
}
|
Suara mammal!
Ekor bergoyang-goyang...
Fido berusia 2 tahun
3. Demonstrasikanlah
mekanisme pewarisan pada soal nomor 2 yang melibatkan konstruktor dan
destruktor.
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
|
// pewarisanKonstruktorDestruktor.cpp
#include
<iostream>
#include
<conio.h>
using namespace std;
enum VARIETAS { GOLDEN, CAIRN, DANDIE,
SHETLAND, DOBERMAN, LAB };
class Mammal
{
public:
// konstruktor
Mammal();
~Mammal();
//aksesor
int GetUmur() const { return
umurNya; }
void SetUmur(int umur) { umurNya = umur; }
int GetBerat() const { return
beratNya; }
void SetBerat(int berat) { beratNya = berat; }
//metode-metode
lain
void Bicara() const { cout << "Suara
mammal!\n"; }
void Tidur() const { cout << "shhh.
Saya sedang tidur.\n"; }
protected:
int umurNya;
int beratNya;
};
class Anjing : public Mammal
{
public:
// konstruktor
Anjing();
~Anjing();
// aksesor
VARIETAS
GetVarietas() const { return varietasNya; }
void SetVarietas(VARIETAS varietas) {
varietasNya = varietas; }
// metode-metode
lain
void GoyangEkor() const { cout << "Ekor bergoyang-goyang...\n"; }
void MintaMakan() const { cout << "Meminta makanan...\n"; }
private:
VARIETAS
varietasNya;
};
Mammal::Mammal():umurNya(3), beratNya(5)
{
std::cout
<< "konstruktor mammal... "
<< endl;
}
Mammal::~Mammal()
{
std::cout
<< "destruktor mammal... "
<< endl;
}
Anjing::Anjing():varietasNya(GOLDEN)
{
std::cout
<< "konstruktor Anjing...
" << endl;
}
Anjing::~Anjing()
{
std::cout
<< "destruktor Anjing... " << endl;
}
int main()
{
Anjing Fido;
Fido.Bicara();
Fido.GoyangEkor();
cout <<
"Fido berusia " <<
Fido.GetUmur() << " tahun"
<< endl;
getch();
return 0;
}
|
konstruktor mammal...
konstruktor Anjing...
Suara mammal!
Ekor bergoyang-goyang...
Fido berusia 3 tahun
4. Tulislah sebuah
program C++ dimana dilakukan pelewatan argumen kepada konstruktor 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
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
|
// pelewatanKonstruktorBasis.cpp
#include
<iostream>
#include
<conio.h>
using namespace std;
enum VARIETAS { GOLDEN, CAIRN, DANDIE,
SHETLAND, DOBERMAN, LAB };
class Mammal
{
public:
// konstruktor
Mammal();
Mammal(int
umur);
~Mammal();
//aksesor
int GetUmur() const { return
umurNya; }
void SetUmur(int umur) { umurNya = umur; }
int GetBerat() const { return
beratNya; }
void SetBerat(int berat) { beratNya = berat; }
//metode-metode
lain
void Bicara() const { cout << "Suara
mammal!\n"; }
void Tidur() const { cout << "shhh.
Saya sedang tidur.\n"; }
protected:
int umurNya;
int beratNya;
};
class Anjing : public Mammal
{
public:
// konstruktor
Anjing();
Anjing(int umur);
Anjing(int umur, int berat);
Anjing(int umur, VARIETAS varietas);
Anjing(int umur, int berat, VARIETAS varietas);
~Anjing();
// aksesor
VARIETAS
GetVarietas() const { return
varietasNya; }
void SetVarietas(VARIETAS varietas) {
varietasNya = varietas; }
// metode-metode
lain
void GoyangEkor() const { cout << "Ekor bergoyang-goyang...\n"; }
void MintaMakan() const { cout << "Meminta makanan...\n"; }
private:
VARIETAS
varietasNya;
};
Mammal::Mammal():umurNya(1), beratNya(5)
{
cout <<
"konstruktor mammal..."
<< endl;
}
Mammal::Mammal(int
umur): umurNya(umur), beratNya(5)
{
cout <<
"konstruktor Mammal(int)
..." << endl;
}
Mammal::~Mammal()
{
std::cout
<< "destruktor mammal...
" << endl;
}
Anjing::Anjing():Mammal(), varietasNya(GOLDEN)
{
cout <<
"konstruktor Anjing..."
<< endl;
}
Anjing::Anjing(int
umur):
Mammal(umur),
varietasNya(GOLDEN)
{
cout <<
"konstruktor Anjing(int)
..." << endl;
}
Anjing::Anjing(int
umur, int berat):
Mammal(umur),
varietasNya(GOLDEN)
{
beratNya = berat;
cout <<
"konstruktor Anjing(int, int)
..." << endl;
}
Anjing::Anjing(int
umur, int berat, VARIETAS
varietas):
Mammal(umur),
varietasNya(varietas)
{
beratNya = berat;
cout <<
"konstruktor Anjing(int, int,
varietas) ..." << endl;
}
Anjing::Anjing(int
umur, VARIETAS varietas):
Mammal(umur),
varietasNya(varietas)
{
cout <<
"konstruktor Anjing(int,
varietas) ..." << endl;
}
Anjing::~Anjing()
{
cout <<
"destruktor Anjing ..."
<< endl;
}
int main()
{
Anjing Fido;
Anjing rover(5);
Anjing
buster(6,8);
Anjing yorkie
(3,GOLDEN);
Anjing dobbie
(4,20,DOBERMAN);
Fido.Bicara();
rover.GoyangEkor();
cout <<
"Yorkie berusia " << yorkie.GetUmur()
<<
" tahun" << endl;
cout <<
"Dobbie memiliki berat badan ";
cout <<
dobbie.GetBerat() << " kilogram"
<< endl;
getch();
return 0;
}
|
konstruktor mammal...
konstruktor Anjing...
konstruktor Mammal(int) ...
konstruktor Anjing(int) ...
konstruktor Mammal(int) ...
konstruktor Anjing(int, int) ...
konstruktor Mammal(int) ...
konstruktor Anjing(int, varietas) ...
konstruktor Mammal(int) ...
konstruktor Anjing(int, int, varietas) ...
Suara mammal!
Ekor bergoyang-goyang...
Yorkie berusia 3 tahun
Dobbie memiliki berat badan 20 kilogram
5. Tulislah sebuah
program C++ dimana dilakukan pendefinisian-ulang (overriding) terhadap fungsi-fungsi kelas basis pada kelas
terderivasi.
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
|
// pendefinisianUlangFungsi.cpp
#include
<iostream>
#include
<conio.h>
using namespace std;
enum VARIETAS { GOLDEN, CAIRN, DANDIE,
SHETLAND, DOBERMAN, LAB };
class Mammal
{
public:
// konstruktor
Mammal() { cout
<< "konstruktor Mammal ...\n"; }
~Mammal() { cout
<< "destruktor Mammal ...\n"; }
//metode-metode
lain
void Bicara() const { cout << "Suara
mammal!\n"; }
void Tidur() const { cout << "shhh.
Saya sedang tidur.\n"; }
protected:
int umurNya;
int beratNya;
};
class Anjing : public Mammal
{
public:
// konstruktor
Anjing(){ cout
<< "konstruktor Anjing ...\n"; }
~Anjing(){ cout
<< "destruktor Anjing ...\n"; }
// metode-metode
lain
void GoyangEkor() const { cout << "Ekor bergoyang-goyang...\n"; }
void MintaMakan() const { cout
<< "Meminta makanan...\n"; }
void Bicara() const { cout <<
"Gung Gung!\n"; }
private:
VARIETAS
varietasNya;
};
int main()
{
Mammal
binatangBesar;
Anjing Fido;
binatangBesar.Bicara();
Fido.Bicara();
getch();
return 0;
}
|
konstruktor Mammal ...
konstruktor Mammal ...
konstruktor Anjing ...
Suara mammal!
Gung Gung!
6. Pada kode pada soal
nomor 5, metode Bicara() pada kelas Anjing menyembunyikan metode Bicara() pada kelas basis. Hal ini
dapat menyebabkan hasil yang tak diinginkna. Jika kelas Mammal memiliki sebuah metode, Bergerak(),
yang dioverload, dan kelas Anjing
mendefinisikan-ulang metode tersebut, maka metode Bergerak() pada kelas Anjing akan menyembunyikan semua metode Bergerak() (termasuk metode-metode
teroverload) pada kelas Mammal. 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
|
// sembunyikanMetode.cpp
#include <iostream>
#include <conio.h>
using std::cout;
class Mammal
{
public:
void
Bergerak() const { cout <<
"Mammal bergerak satu
langkah.\n"; }
void
Bergerak(int jarak) const
{
cout << "Mammal bergerak ";
cout << jarak <<" langkah.\n";
}
protected:
int
umurNya;
int
beratNya;
};
class Anjing : public
Mammal
{
public:
// metode ini menyembunyikan
semua metode Bergerak pada kelas basis (Mammal)
void
Bergerak() const { cout <<
"Anjing bergerak 5 langkah.\n"; }
};
int main()
{
Mammal binatangBesar;
Anjing Fido;
binatangBesar.Bergerak();
binatangBesar.Bergerak(2);
Fido.Bergerak();
// Fido.Bergerak(10);
getch();
return
0;
}
|
Mammal bergerak satu langkah.
Mammal bergerak 2 langkah.
Anjing bergerak 5 langkah.
7. Demonstrasikanlah
pemanggilan metode pada kelas basis dari metode yang didefinisikan-ulang pada kelas
terderivasi.
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
|
//
memanggilMetodeBasis.cpp
#include <iostream>
#include <conio.h>
using std::cout;
class Mammal
{
public:
void
Bergerak() const { cout <<
"Mammal bergerak satu
langkah.\n"; }
void
Bergerak(int jarak) const
{
cout << "Mammal bergerak ";
cout << jarak <<" langkah.\n";
}
protected:
int
umurNya;
int
beratNya;
};
class Anjing : public Mammal
{
public:
void
Bergerak() const;
};
void Anjing::Bergerak() const
{
cout << "Dalam gerak anjing...\n";
Mammal::Bergerak(3);
}
int main()
{
Mammal binatangBesar;
Anjing Fido;
binatangBesar.Bergerak(2);
Fido.Mammal::Bergerak(6);
getch();
return
0;
}
|
Mammal bergerak 2 langkah.
Mammal bergerak 6 langkah.
8. Demonstrasikanlah
penggunaan metode virtual.
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
|
// metodeVirtual.cpp
#include <iostream>
#include <conio.h>
using std::cout;
class Mammal
{
public:
Mammal():umurNya(1) { cout <<
"konstruktor Mammal ...\n";
}
virtual
~Mammal() { cout << "destruktor
Mammal ...\n"; }
void
Bergerak() const { cout <<
"Mammal bergerak satu
langkah\n"; }
virtual
void Bicara() const { cout << "Mammal
bicara!\n"; }
protected:
int
umurNya;
};
class Anjing : public
Mammal
{
public:
Anjing() { cout << "konstruktor Anjing...\n"; }
virtual
~Anjing() { cout << "destruktor
Anjing...\n"; }
void
WagTail() { cout << "Menggoyang
ekor...\n"; }
void
Bicara()const { cout <<
"Guk Guk!\n"; }
void
Bergerak()const { cout <<
"Anjing bergerak 5 langkah lagi...\n"; }
};
int main()
{
Mammal *pAnjing = new Anjing;
pAnjing->Bergerak();
pAnjing->Bicara();
getch();
return
0;
}
|
konstruktor Mammal ...
konstruktor Anjing...
Mammal bergerak satu langkah
Guk Guk!
9. Demonstrasikanlah
beberapa metode virtual yang dipanggil secara bergiliran.
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
|
// metodeVirtualBergiliran.cpp
#include
<iostream>
#include
<conio.h>
using std::cout;
using std::cin;
class Mammal
{
public:
Mammal():umurNya(1) {}
virtual ~Mammal() {}
virtual void Bicara() const {
cout << "Mammal bicara!\n";
}
protected:
int umurNya;
};
class Anjing : public Mammal
{
public:
void Bicara()const { cout << "Guk
Guk!\n"; }
};
class Kucing : public Mammal
{
public:
void Bicara()const { cout << "Ngeonk
Ngeonk!\n"; }
};
class Kuda : public Mammal
{
public:
void Bicara()const { cout << "Nguahhh
Nguahhh!\n"; }
};
class Babi : public Mammal
{
public:
void Bicara()const { cout << "Horja
Horja!\n"; }
};
int main()
{
Mammal*
arrayKu[5];
Mammal* ptr;
int pilihan, i;
for ( i = 0; i<5; i++)
{
cout << "(1)anjing (2)kucing (3)kuda (4)babi: ";
cin >>
pilihan;
switch (pilihan)
{
case 1: ptr = new Anjing;
break;
case 2: ptr = new Kucing;
break;
case 3: ptr = new Kuda;
break;
case 4: ptr = new Babi;
break;
default: ptr = new Mammal;
break;
}
arrayKu[i] =
ptr;
}
for (i=0;i<5;i++)
arrayKu[i]->Bicara();
getch();
return 0;
}
|
(1)anjing (2)kucing (3)kuda (4)babi: 1
(1)anjing (2)kucing (3)kuda (4)babi: 2
(1)anjing (2)kucing (3)kuda (4)babi: 3
(1)anjing (2)kucing (3)kuda (4)babi: 4
(1)anjing (2)kucing (3)kuda (4)babi: 5
Guk Guk!
Ngeonk Ngeonk!
Nguahhh Nguahhh!
Horja Horja!
Mammal bicara!
10. Perhatikan bahwa
fungsi virtual hanya dapat diterapkan pada pointer dan referensi. Pelewatan
sebuah objek dengan nilai tidak dapat menyebabkan fungsi virtual dipanggil.
Demonstrasikanlah 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
|
// fungsiVirtualNilai.cpp
#include <iostream>
#include <conio.h>
using std::cout;
using std::cin;
class Mammal
{
public:
Mammal():umurNya(1) {}
virtual
~Mammal() {}
virtual
void Bicara() const { cout
<< "Mammal bicara!\n"; }
protected:
int
umurNya;
};
class Anjing : public
Mammal
{
public:
void
Bicara()const { cout <<
"Guk Guk!\n"; }
};
class Kucing : public
Mammal
{
public:
void
Bicara()const { cout << "Ngeonk
Ngeonk!\n"; }
};
void FungsiNilai (Mammal);
void FungsiPointer (Mammal*);
void FungsiReferensi (Mammal&);
int main()
{
Mammal* ptr=0;
int
pilihan;
while
(1)
{
bool
fKeluar = false;
cout << "(1)anjing (2)kucing (0)keluar: ";
cin >> pilihan;
switch
(pilihan)
{
case 0: fKeluar = true;
break;
case 1: ptr = new
Anjing;
break;
case 2: ptr = new
Kucing;
break;
default: ptr = new
Mammal;
break;
}
if
(fKeluar == true)
break;
FungsiPointer(ptr);
FungsiReferensi(*ptr);
FungsiNilai(*ptr);
}
getch();
return
0;
}
void FungsiNilai(Mammal NilaiMammal)
{
NilaiMammal.Bicara();
}
void FungsiPointer(Mammal * pMammal)
{
pMammal->Bicara();
}
void FungsiReferensi(Mammal & rMammal)
{
rMammal.Bicara();
}
|
(1)anjing (2)kucing (0)keluar: 1
Guk Guk!
Guk Guk!
Mammal bicara!
(1)anjing (2)kucing (0)keluar: 2
Ngeonk Ngeonk!
Ngeonk Ngeonk!
Mammal bicara!
(1)anjing (2)kucing (0)keluar:
11. Demonstrasikanlah
konstruktor penyalin virtual.
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
|
// konstruktorPenyalinVirtual.cpp
#include
<iostream>
#include
<conio.h>
using namespace std;
class Mammal
{
public:
Mammal():umurNya(1) { cout << "konstruktor Mammal...\n"; }
virtual ~Mammal()
{ cout << "destruktor
Mammal...\n"; }
Mammal (const Mammal & rhs);
virtual void Bicara() const {
cout << "Mammal berbicara!\n"; }
virtual Mammal* Klon() { return new Mammal(*this); }
int GetUmur()const { return umurNya; }
protected:
int umurNya;
};
Mammal::Mammal (const
Mammal & rhs):umurNya(rhs.GetUmur())
{
cout <<
"Konstruktor penyalin Mammal ...\n";
}
class Anjing : public Mammal
{
public:
Anjing() { cout
<< "konstruktor Anjing ...\n"; }
virtual ~Anjing() { cout <<
"destruktor Anjing...\n"; }
Anjing (const Anjing & rhs);
void Bicara()const { cout << "Guk
Guk!\n"; }
virtual Mammal* Klon() { return new Anjing(*this); }
};
Anjing::Anjing(const
Anjing & rhs):
Mammal(rhs)
{
cout <<
"konstruktor penyalin Anjing ...\n";
}
class Kucing : public Mammal
{
public:
Kucing() { cout
<< "konstruktor Kucing...\n"; }
~Kucing() { cout
<< "destruktor Kucing...\n"; }
Kucing (const
Kucing &);
void Bicara()const { cout << "Ngeonk
Ngeonk!\n"; }
virtual Mammal* Klon() { return new Kucing(*this); }
};
Kucing::Kucing(const Kucing & rhs):
Mammal(rhs)
{
cout <<
"konstruktor penyalin Kucing ...\n";
}
enum BINATANG { MAMMAL, ANJING, KUCING};
const int
JumJenisBinatang = 3;
int main()
{
Mammal
*arrayKu[JumJenisBinatang];
Mammal* ptr;
int pilihan, i;
for ( i = 0; i<JumJenisBinatang;
i++)
{
cout <<
"(1)anjing (2)kucing (3)Mammal:
";
cin >>
pilihan;
switch (pilihan)
{
case ANJING: ptr = new Anjing;
break;
case KUCING: ptr = new Kucing;
break;
default: ptr = new Mammal;
break;
}
arrayKu[i] =
ptr;
}
Mammal
*arrayLain[JumJenisBinatang];
for (i=0;i<JumJenisBinatang;i++)
{
arrayKu[i]->Bicara();
arrayLain[i]
= arrayKu[i]->Klon();
}
for (i=0;i<JumJenisBinatang;i++)
arrayLain[i]->Bicara();
getch();
return 0;
}
|
(1)anjing (2)kucing (3)Mammal: 1
konstruktor Mammal...
konstruktor Anjing ...
(1)anjing (2)kucing (3)Mammal: 2
konstruktor Mammal...
konstruktor Kucing...
(1)anjing (2)kucing (3)Mammal: 3
konstruktor Mammal...
Guk Guk!
Konstruktor penyalin Mammal ...
konstruktor penyalin Anjing ...
Ngeonk Ngeonk!
Konstruktor penyalin Mammal ...
konstruktor penyalin Kucing ...
Mammal berbicara!
Konstruktor penyalin Mammal ...
Guk Guk!
Ngeonk Ngeonk!
Mammal berbicara!
No comments:
Post a Comment