Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

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:

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 :

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 :

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 :

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)

Bahasa C

  1. Public Cloud Vs Private Cloud Vs Hybrid Cloud
  2. Kelebihan dan Kerugian Awan Publik
  3. Kelebihan dan Kerugian Cloud Pribadi
  4. Variabel C++, Literal dan Konstanta
  5. Kelas dan Objek C++
  6. Manajemen Memori C++:baru dan hapus
  7. Fungsi teman C++ dan Kelas teman
  8. Struktur dan kelas dalam C++
  9. Jaringan area pribadi dibangun di jaringan publik Sigfox
  10. Perbedaan antara Struktur dan Kelas:Dijelaskan dengan Contoh C++