Pemrograman Berorientasi Objek dengan C++ (Bagian 1)
Memahami perbedaan antara struct dan Class
Jika pembaca pernah belajar tentang struct
di dalam C, maka mempelajari konsep pemrograman berbasis objek pada C++ tidak akan memerlukan waktu lama. Misalnya, di dalam C, terdapat tipe data seperti integer, float dan string yang digabung dijadikan satu tipe data tunggal yang disebut struct
. Pada C++, terdapat versi pengembangan dari struct, yang disebut class
.
- Class vs Object
Dalam dunia nyata, akan sering ditemui beberapa objek individual yang memiliki kesamaan jenis. Ada ribuan jenis sepeda yang ada, namun semuanya memiliki kegunaan dan model yang sama. Setiap sepeda dibuat dengan set cetak biru yang sama dan oleh karena itu ia memiliki komponen yang sama. Dalam istilah pemrograman berbasis objek, dapat dikatakan, sepeda yang sedang dimiliki oleh seseorang adalah instance dari sebuah class yang disebut sepeda. Sebuah class adalah cetak biru dari setiap object yang dibuat
- Class vs Struct
Untuk memahami lebih jelas tentang perbedaan class dan struct perhatikan program berikut
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <string> | |
using namespace std; | |
struct Robot_Struct { | |
int id; | |
int no_wheels; | |
string robot_name; | |
}; | |
class Robot_Class { | |
public: | |
int id; | |
int no_wheels; | |
string robot_name; | |
void move_robot(); | |
void stop_robot(); | |
}; | |
void Robot_Class::move_robot() { | |
cout << "Moving Robot" << endl; | |
}; | |
void Robot_Class::stop_robot() { | |
cout << "Stopping Robot" << endl; | |
}; | |
int main() { | |
Robot_Struct robot_1; | |
Robot_Class robot_2; | |
robot_1.id = 2; | |
robot_1.robot_name = "Mobil Robot"; | |
robot_2.id = 3; | |
robot_2.robot_name = "Humanoid Robot"; | |
cout << "ID=" << robot_1.id << "\t" << "Robot Name:" << robot_1.robot_name | |
<< endl; | |
cout << "ID=" << robot_2.id << "\t" << "Robot Name:" << robot_2.robot_name | |
<< endl; | |
robot_2.move_robot(); | |
robot_2.stop_robot(); | |
return 0; | |
} | |
; | |
Program tersebutmencontohkan penggunaan struct
dan class
. Terdapatstruct
bernama Robot_Struct
, pada baris 6-10. dan class
yang bernama Robot_Class
pada baris 12 – 19.
Perbedaan keduanya adalah, jika struct
hanya berisi variabel sedangkan class
juga dapat berisi deklarasi fungsi. Fungsi dapat ditulis di luar atau dalam class, pada artikel ini implementasi fungsi ditulis di luar class, guna menjaga definisi class ditulis pendek.
Perhatikan pada baris 30-37 dimana robot_2
adalah object dari class Robot_Class
sedangkan robot_1 adalah instance dari struct
. Dengan menggunakan object , programmer dapat mengakses tiap variabel dan fungsi menggunakan operator dot (.
). Sedangkan untuk struct
atau class pointer digunakan operator ->
untuk mengakses variabel
Robot_Class *robot_2;
robot_2 = new Robot_Class;
robot_2 -> id-2;
robot_2 -> name="Humanoid Robot"
operator new
akan mengalokasikan memori untuk objek C++. Untuk meng-compile program dapat digunakan perintah berikut
$ g++ classvsstruct.cpp -o classvsstruct $ ./classvsstruct
- Class Access Modifier
Di dalam Robot_Class pada
baris 13 terdapat keyword public:
yang disebut sebagai access modifier. Fitur ini disebut sebagai data hiding. Dengan mengatur access modifier, programmer dapat membatasi siapa saja yang bisa mengakses fungsi atau variabel didalam sebuah class
Ada tiga jenis access modifier, yaitu
public
Semua member yang bersifatpublic
dapat diakses dimanapun di luar class di dalam programprivate
variabel atau fungsi yang bertipe private hanya bisa diakses di dalam classprotected
. pada umumnya mirip dengan private namun perbedaannya ada pada bahwa memberprotected
masih bisa diakses olehclass
anak sedangkanprivate
tidak
- Pewarisan dalam C++
Pewarisan (inheritance
) adalah konsep penting lain di Pemrograman Berorientasi Objek. Jika terdapat dua atau lebih class
, dan diinginkan suatu class
memiliki fungsi yang sama dengan class yang lain maka dapat digunakan inheritance. Dengan menggunakan inheritance, fungsi yang terdapat pada class lain dapat digunakan ulang (reuse) di class lain. Class baru akan mewarisi sifat dari Class
lama, Class
baru akan disebut sebagai class
turunan (derived class), sedangkan class lama adalah class induk (base class)
Sebuah class
dapat mewarisi properti public
, protected
ataupun private
, dengan ketentuan sebagai berikut
jika sebuah class
diturunkan dari class
dasar, maka member public
dari class
dasar akan menjadi member public
pula untuk class
turunan. Member protected
dari class
dasar akan menjadi member protected class
turunan. Member private
dari class
dasar tidak akan bisa diakses oleh class
turunan.
Berikut adalah contoh program yang menggambarkan pewarisan sifat
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <string> | |
using namespace std; | |
struct Robot_Class | |
{ | |
int id; | |
int no_wheels; | |
string robot_name; | |
void move_robot(); | |
void stop_robot(); | |
}; | |
class Robot_Class_Derived: public Robot_Class | |
{ | |
public: | |
void turn_left(); | |
void turn_right(); | |
}; | |
void Robot_Class::move_robot() | |
{ | |
cout<<"Moving Robot"<<endl; | |
} | |
void Robot_Class::stop_robot() | |
{ | |
cout<<"Stopping Robot"<<endl; | |
} | |
void Robot_Class_Derived::turn_left() | |
{ | |
cout<<"turn left"<<endl; | |
} | |
void Robot_Class_Derived::turn_right() | |
{ | |
cout<<"turn right"<<endl; | |
} | |
int main() | |
{ | |
Robot_Class_Derived robot; | |
robot.id = 2; | |
robot.robot_name = "Mobile robot"; | |
cout<<"ID="<<robot.id<<"\t"<<"Robot Name"<<robot.robot_name<<endl; | |
robot.move_robot(); | |
robot.stop_robot(); | |
return 0; | |
} |