Dalam C++ untuk pembuatan kelas dibagi menjadi dua, yakni header dan implementasi. Misalnya kita memiliki kelas-kelas sebagai berikut:
Kendaraan
Mobil
Motor
Berarti kita akan membuat 6 file seperti ini:
Kendaraan.h
Kendaraan.cpp
Mobil.h
Mobil.cpp
Motor.h
Motor.cpp
Misalkan Motor dan Mobil masing-masing inherit Kendaraan. Berarti kedua kelas tersebut harus di "include" ke file Mobil dan Motor kan? Nah disini masalahnya
Case Study
Dimisalkan kita memiliki kelas Kendaraan sebagai berikut
Kendaraan.h
//Kendaraan.h
class Kendaraan{
private:
int kecepatan;
public:
Kendaraan();
~Kendaraan();
void setKecepatan(int kecepatan);
int getKecepatan();
};
Kendaraan.cpp
Kendaraan::Kendaraan(){
}
Kendaraan::~Kendaraan(){
}
void Kendaraan::setKecepatan(int kecepatan){
this->kecepatan = kecepatan;
}
int Kendaraan::getKecepatan(){
return this->kecepatan;
}
Dan kelas anaknya adalah sebagai berikut
Motor.h
//Motor.h
#include "Kendaraan.h"
class Motor:public Kendaraan{
private:
public:
Motor();
~Motor();
};
Motor.cpp
#include "Motor.h"
Motor::Motor(){
}
Motor::~Motor(){
}
Mobil.h
//Mobil.h
#include "Kendaraan.h"
class Mobil:public Kendaraan{
private:
public:
Mobil();
~Mobil();
};
Mobil.cpp
#include "Mobil.h"
Mobil::Mobil(){
}
Mobil::~Mobil(){
}
Dan program main nya seperti ini
Main.cpp
#include <iostream>
#include "Motor.h"
#include "Mobil.h"
using namespace std;
int main(string args[]){
Motor motor;
Mobil mobil;
return 0;
}
Ketika di compile, yang terjadi adalah error seperti ini
In file included from Mobil.h:1,
from Main.cpp:4:
Kendaraan.h:2: error: redefinition of ‘class Kendaraan’
Kendaraan.h:2: error: previous definition of ‘class Kendaraan’
"redefinition of class"! Berarti kita mendefinisikan kelas lebih dari sekali. Ya, soalnya kita sudah mendefiniskan kelas Kendaraan di Motor (dengan #include "Kendaraan.h") kemudian di-include lagi di Mobil, walhasil jadinya dua kali include.
Nah karena itulah kita memerlukan Header guard.
Header Guard
Header guard, atau Include Guard merupakan directives, yaitu perintah yang diawali # dan diakhiri dengan baris baru.Nah, kita bisa membuat Header Guard dengan memberikan directive berikut di awal tiap header
#ifndef KENDARAAN_H
#define KENDARAAN_H
//Kendaraan.h
class Kendaraan{
private:
int kecepatan;
public:
Kendaraan();
~Kendaraan();
void setKecepatan(int kecepatan);
int getKecepatan();
};
#endif
directive yang kita tulis menyatakan jika belum didefinisikan (#ifndef) maka definisikan (#define) kelas kita. Jangan lupa beri #endif di akhir
beri header guard ini di setiap header kelas yang kamu buat. Dengan pemberian header guard ini kalau kamu #include kelas lebih dari sekali nggak ada lagi issue redefinition of class
referensi:
http://www.learncpp.com/cpp-tutorial/110-a-first-look-at-the-preprocessor/
http://en.wikipedia.org/wiki/Include_guard
http://en.wikipedia.org/wiki/Header_file
No comments:
Post a Comment
Comment is caring :)