Ada beberapa catatan dari praktikum kemarin dan kuliah yang tgl 19nya(pekan sebelumnya) :
- Ternyata data-data bertipe private dan protected tidak bisa diakses dari fungsi main. Wah baru menyadari sekarang,, kemarin iya-iya aja kalau dibilang ‘protected itu hanya bisa diakses oleh kelas itu sendiri dan turunannya’ dan ‘private itu hanya bisa diakses oleh kelas itu sendiri’.
Jadi, misalkan ada
class Coba {
private:
int u;
public :
void setU (int a) {u=a;}
int getU(){return u;}
};
Misalnya kita ingin mencetak nilai u, maka cara yang seperti ini :
main () {
Coba coba;
std::cout<<coba.u;
}
akan error, karena u itu private, ya to? Jadi untuk mensiasatinya digunakanlah fungsi getter (untuk mengambil nilai dari data2 yang private/protected, di dalam contoh di atas getter nya itu getU ya?) sehingga, coba ganti dengan :
std::cout<<coba.getU();
Kadang kita perlu bener2 mencoba supaya bener2 ngerti.
2. Ternyata saat kita membentuk objek dari suatu derived class, maka konstruktor base-nya akan dipanggil terlebih dahulu. Kode di bawah ini sewaktu dicoba menunjukkan begitu (ya..?):
#include <iostream>
using namespace std;
class Mother {
public :
Mother () {cout<<”base constructor :Mother()\n”;}
Mother(int a){cout<<”base constructor: Mother(“<<a<<”)\n”;}
};
class Daughter : public Mother {
public :
Daughter(int){cout <<”Daughter(int)\n”;}
};
class Son : public Mother {
public :
Son (int c) : Mother(c)
{cout<< “Son(int)\n”;}
Son () {cout<< “Son()\n”;}
};
main () {
Son son, son2(5);
Daughter daughter(3);
}
Keluarannya :
base constructor :Mother()
Son()
base constructor:Mother(5)
Son(int)
base constructor :Mother()
Daughter(int)
3. Sekarang tentang pointer. Benarkah pernyataan2 ini ?
- Pointer ke kelas Base bisa menunjuk ke kelas Derived-nya
- Pointer ke kelas Derived bisa menunjuk ke kelas Base-nya
a. benar-benar b. benar-salah
c. salah-benar d. Dua-duanya kurang tepat
Selamat buat yang menjawab b… tapi nggak ada hadiahnya ya… ternyata coba2 dikit,, pernyataan pertama benar, tapi yang kedua kurang tepat. Pointer ke kelas base bisa menunjuk ke derived-nya, kenapa ya?
Um,, dipikir,, mungkin karena kelas Derived itu kan turunan dari kelas base-nya, jadi scr nggak langsung derived punya sifat-sifatnya base. Tapi,, kalau pointer ke kelas derived dipakai untuk menunjuk kelas base nya, ternyata nggak bisa. Alasannya mungkin karena derived itu (umumnya) lebih kaya (lebih banyak lagi/ditambah lagi fungsi2nya) daripada base, jadi kalau pointer derived dipakai nunjuk ke base, mungkin ibaratnya pointer itu diminta menunjuk ke sesuatu secara nggak utuh (begitukah?), jadi ga bisa deh. Allohua’lam.
//POINTER KE DERIVED MEM-POINT KELAS BASE NYA
//BISA NGGAK YA?
#include <iostream>
using namespace std;
class Basis {
public :
void cet1(){cout<<”hai1\n”;}
};
class Turunan : public Basis {
public :
void cet2(){cout<<”hai2\n”;}
};
main () {
Basis b;
Turunan *tp = &b;
tp->cet1();
getch();
}
4. Masih tentang pointer. Misalkan kita punya suatu pointer kelas base yang menunjuk ke derived class nya.
class Basis { //base class
public :
void cet1(){cout<<”hai1\n”;}
};
class Turunan : public Basis { //derived class
public :
void cet2(){cout<<”hai2\n”;}
};
main () {
Turunan t;
Basis *bPtr = &t; //bPtr point ke t(derived)
Apakah pointer tersebut memiliki fungsi-fungsi yang ada di derived class (dg kata lain, apakah bPtr memiliki fs. cet2()?
Yap… ternyata jawabannya bPtr ndak punya… ternyata pointer itu hanya memiliki fungsi2 dari kelas yang dia menunjuk kepadanya. Jadi misalnya dia menunjuk ke objek derived nya,, fungsi2 yang ada di derived dia ndak punya…
Sebenrnya masih ada lanjutannya.. tapi, sptnya segini dulu aja.. oia harap merujuk lagi ke referensi2 yang lebih dipercaya (krn sy belum bc,, hanya coba2 kodenya)… kalau sempat, insyaa Alloh dilanjutkan.
Allohua’lam.