C++ Warisan Publik, Dilindungi, dan Pribadi
C++ Public, Protected, dan Private Inheritance
Dalam tutorial ini, kita akan belajar menggunakan warisan publik, terproteksi, dan privat di C++ dengan bantuan contoh.
Dalam pewarisan C++, kita dapat menurunkan kelas anak dari kelas dasar dalam mode akses yang berbeda. Misalnya,
class Base {
.... ... ....
};
class Derived : public Base {
.... ... ....
};
Perhatikan kata kunci public dalam kode
class Derived : public Base
Ini berarti bahwa kita telah membuat kelas turunan dari kelas dasar dalam mode publik . Atau, kita juga dapat menurunkan kelas di dilindungi atau pribadi mode.
3 kata kunci ini (public , protected , dan private ) dikenal sebagai penentu akses dalam pewarisan C++.
warisan publik, terlindungi, dan pribadi di C++
publik , dilindungi, dan pribadi warisan memiliki fitur berikut:
- warisan publik membuat
public anggota kelas dasar public di kelas turunan, dan protected anggota kelas dasar tetap protected di kelas turunan.
- warisan yang dilindungi membuat
public dan protected anggota kelas dasar protected di kelas turunan.
- warisan pribadi membuat
public dan protected anggota kelas dasar private di kelas turunan.
Catatan: private anggota kelas dasar tidak dapat diakses oleh kelas turunan.
class Base {
public:
int x;
protected:
int y;
private:
int z;
};
class PublicDerived: public Base {
// x is public
// y is protected
// z is not accessible from PublicDerived
};
class ProtectedDerived: protected Base {
// x is protected
// y is protected
// z is not accessible from ProtectedDerived
};
class PrivateDerived: private Base {
// x is private
// y is private
// z is not accessible from PrivateDerived
}
Contoh 1:Warisan publik C++
// C++ program to demonstrate the working of public inheritance
#include <iostream>
using namespace std;
class Base {
private:
int pvt = 1;
protected:
int prot = 2;
public:
int pub = 3;
// function to access private member
int getPVT() {
return pvt;
}
};
class PublicDerived : public Base {
public:
// function to access protected member from Base
int getProt() {
return prot;
}
};
int main() {
PublicDerived object1;
cout << "Private = " << object1.getPVT() << endl;
cout << "Protected = " << object1.getProt() << endl;
cout << "Public = " << object1.pub << endl;
return 0;
}
Keluaran
Private = 1
Protected = 2
Public = 3
Di sini, kami telah menurunkan PublicDerived dari Base dalam mode publik .
Akibatnya, di PublicDerived :
- keuntungan diwarisi sebagai dilindungi .
- pub dan
getPVT() diwarisi sebagai publik .
- pvt tidak dapat diakses karena pribadi di
Base .
Sejak pribadi dan dilindungi anggota tidak dapat diakses dari main() , kita perlu membuat fungsi publik getPVT() dan getProt() untuk mengaksesnya:
// Error: member "Base::pvt" is inaccessible
cout << "Private = " << object1.pvt;
// Error: member "Base::prot" is inaccessible
cout << "Protected = " << object1.prot;
Perhatikan bahwa getPVT() fungsi telah didefinisikan di dalam Base . Namun getProt() fungsi telah didefinisikan di dalam PublicDerived .
Ini karena pvt , yang pribadi di Base , tidak dapat diakses ke PublicDerived .
Namun, keuntungan dapat diakses oleh PublicDerived karena warisan publik. Jadi, getProt() dapat mengakses variabel yang dilindungi dari dalam PublicDerived .
Aksesibilitas dalam Warisan publik
| Aksesibilitas | anggota pribadi | anggota yang dilindungi | anggota publik |
| Kelas Dasar | Ya | Ya | Ya |
| Kelas Turunan | Tidak | Ya | Ya |
Contoh 2:Warisan yang dilindungi C++
// C++ program to demonstrate the working of protected inheritance
#include <iostream>
using namespace std;
class Base {
private:
int pvt = 1;
protected:
int prot = 2;
public:
int pub = 3;
// function to access private member
int getPVT() {
return pvt;
}
};
class ProtectedDerived : protected Base {
public:
// function to access protected member from Base
int getProt() {
return prot;
}
// function to access public member from Base
int getPub() {
return pub;
}
};
int main() {
ProtectedDerived object1;
cout << "Private cannot be accessed." << endl;
cout << "Protected = " << object1.getProt() << endl;
cout << "Public = " << object1.getPub() << endl;
return 0;
}
Keluaran
Private cannot be accessed.
Protected = 2
Public = 3
Di sini, kami telah menurunkan ProtectedDerived dari Base dalam mode terlindungi .
Akibatnya, di ProtectedDerived :
- keuntungan , pub dan
getPVT() diwarisi sebagai dilindungi .
pvt tidak dapat diakses karena pribadi di Base .
Seperti yang kita ketahui, dilindungi anggota tidak dapat langsung diakses dari luar kelas. Akibatnya, kami tidak dapat menggunakan getPVT() dari ProtectedDerived .
Itu juga mengapa kita perlu membuat getPub() fungsi di ProtectedDerived untuk mengakses pub variabel.
// Error: member "Base::getPVT()" is inaccessible
cout << "Private = " << object1.getPVT();
// Error: member "Base::pub" is inaccessible
cout << "Public = " << object1.pub;
Aksesibilitas dalam Warisan yang dilindungi
| Aksesibilitas | anggota pribadi | anggota yang dilindungi | anggota publik |
| Kelas Dasar | Ya | Ya | Ya |
| Kelas Turunan | Tidak | Ya | Ya (diwarisi sebagai variabel yang dilindungi) |
Contoh 3:Warisan pribadi C++
// C++ program to demonstrate the working of private inheritance
#include <iostream>
using namespace std;
class Base {
private:
int pvt = 1;
protected:
int prot = 2;
public:
int pub = 3;
// function to access private member
int getPVT() {
return pvt;
}
};
class PrivateDerived : private Base {
public:
// function to access protected member from Base
int getProt() {
return prot;
}
// function to access private member
int getPub() {
return pub;
}
};
int main() {
PrivateDerived object1;
cout << "Private cannot be accessed." << endl;
cout << "Protected = " << object1.getProt() << endl;
cout << "Public = " << object1.getPub() << endl;
return 0;
}
Keluaran
Private cannot be accessed.
Protected = 2
Public = 3
Di sini, kami telah menurunkan PrivateDerived dari Base dalam mode pribadi .
Akibatnya, di PrivateDerived :
- keuntungan ,
pub dan getPVT() diwarisi sebagai pribadi .
- pvt tidak dapat diakses karena pribadi di
Base .
Seperti yang kita ketahui, private member tidak bisa langsung diakses dari luar class. Akibatnya, kami tidak dapat menggunakan getPVT() dari PrivateDerived .
Itu juga mengapa kita perlu membuat getPub() fungsi di PrivateDerived untuk mengakses pub variabel.
// Error: member "Base::getPVT()" is inaccessible
cout << "Private = " << object1.getPVT();
// Error: member "Base::pub" is inaccessible
cout << "Public = " << object1.pub;
Aksesibilitas dalam Warisan pribadi
| Aksesibilitas | anggota pribadi | anggota yang dilindungi | anggota publik |
| Kelas Dasar | Ya | Ya | Ya |
| Kelas Turunan | Tidak | Ya (diwarisi sebagai variabel pribadi) | Ya (diwarisi sebagai variabel pribadi) |