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 hidden or 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
publicSemua member yang bersifatpublicdapat diakses dimanapun di luar class di dalam programprivatevariabel atau fungsi yang bertipe private hanya bisa diakses di dalam classprotected. pada umumnya mirip dengan private namun perbedaannya ada pada bahwa memberprotectedmasih bisa diakses olehclassanak sedangkanprivatetidak
- 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 hidden or 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; | |
| } |