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) |