14.3. İcazə spesifikatorlarının xüsusiyyətləri: 1. Baza sinif törəmə sinifidə public açar sözü ilə varislənirsə (icazə spesifikatoru = public) onda baza sinifin public , protected və private üzvləri törəmə sinifın public , protected və private üzvlərinə çevrilirlər. Yəni icazələr dəyişilməz qalır. Nümunə:
#include using namespace std;
class base {
int i, j;
public:
void set (int a, int b) { i = a; j = b; }
void show() { cout << i << " " << j << "\n"; }
};
class derived : public base {
int k;
public:
derived(int x) { k = x; }
void showk() { cout << k << "\n"; }
};
2. Baza sinif törəmə sinifdə protected(qorunan) açar sözü ilə varislənirsə(icazə spesifikatoru = protected) onda baza sinifin public və protected üzvləri törəmə sinifın protected üzvlərinə çevrilirlər. Private üzvlər olduğu kimi qalırlar. Nümunə:
#include using namespace std;
class base {
int i;
protected:
int j;
public:
int k;
void seti(int a) { i = a; }
int geti() { return i; }
};
// baza sinifi üzvləri derived sinifində protected varis olunur.
class derived : protected base {
public:
void setj(int a) { j = a; } // j —protected-üzvdür
void setk(int a) { k = a; } // k —protected-üzvdür
int getj() { return j; }
int getk() { return k; }
};
3. Baza sinif törəmə sinifdə private açar sözü ilə varislənirsə (icazə spesifikatoru = private) onda baza sinifin public və protected üzvləri törəmə sinifın private üzvlərinə çevrilirlər. Yəni varis sinif xaricində varis sinifin obyekti tərəfindən bu üzvlər istifadə oluna bilməzlər. Nümunə:
#include using namespace std;
class base {
int i, j;
public:
void set (int a, int b) { i = a; j = b; }
void show() { cout << i << " " << j << "\n"; }
};
class derived : private base // base sinifin açıq üzvləri indi derived sinifini bağlı üzvlərinə çevrildilər.
{
int k;
public:
derived(int x) { k = x; }
void showk() { cout << k << "\n"; set(2,3); show();}
};
int main()
{
derived ob (3);
ob.showk();
ob.set(1, 2); // Səhv! set()-ə müdaxiləyə icazə yoxdur.
ob.show(); // Səhv! show() -ya müdaxiləyə icazə yoxdur.
return 0;
}
Yuxaridakı hər üç halda baza sinifin private üzvləri varis sinifin də private üzvləri olurlar. Yəni private icazəsi olan üzv dəyişənlərin və ya üzv-funksiyaların icazələri dəyişilməz qalır.