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

Warisan C++

Warisan C++

Dalam tutorial ini, kita akan belajar tentang pewarisan dalam C++ dengan bantuan contoh.

Pewarisan adalah salah satu fitur utama pemrograman berorientasi objek di C++. Ini memungkinkan kita untuk membuat kelas baru (kelas turunan) dari kelas yang ada (kelas dasar).

Kelas turunan mewarisi fitur dari kelas dasar dan dapat memiliki fitur tambahan sendiri. Misalnya,

class Animal {
    // eat() function
    // sleep() function
};

class Dog : public Animal {
    // bark() function
};

Di sini, Dog kelas diturunkan dari Animal kelas. Sejak Dog diturunkan dari Animal , anggota Animal dapat diakses oleh Dog .

Perhatikan penggunaan kata kunci public sambil mewarisi Anjing dari Hewan.

class Dog : public Animal {...};

Kita juga bisa menggunakan kata kunci private dan protected bukannya public . Kita akan belajar tentang perbedaan antara menggunakan private , public dan protected nanti di tutorial ini.


adalah-hubungan

Warisan adalah adalah-hubungan . Kami menggunakan warisan hanya jika adalah-hubungan hadir di antara dua kelas.

Berikut beberapa contohnya:

  • Mobil adalah kendaraan.
  • Jeruk adalah buah.
  • Seorang ahli bedah adalah seorang dokter.
  • Anjing adalah binatang.

Contoh 1:Contoh Sederhana Warisan C++

// C++ program to demonstrate inheritance

#include <iostream>
using namespace std;

// base class
class Animal {

   public:
    void eat() {
        cout << "I can eat!" << endl;
    }

    void sleep() {
        cout << "I can sleep!" << endl;
    }
};

// derived class
class Dog : public Animal {
 
   public:
    void bark() {
        cout << "I can bark! Woof woof!!" << endl;
    }
};

int main() {
    // Create object of the Dog class
    Dog dog1;

    // Calling members of the base class
    dog1.eat();
    dog1.sleep();

    // Calling member of the derived class
    dog1.bark();

    return 0;
}

Keluaran

I can eat!
I can sleep!
I can bark! Woof woof!!

Di sini, anjing1 (objek dari kelas turunan Dog ) dapat mengakses anggota kelas dasar Animal . Itu karena Dog diwarisi dari Animal .

// Calling members of the Animal class
dog1.eat();
dog1.sleep();

Anggota yang dilindungi C++

Pengubah akses protected sangat relevan dalam hal pewarisan C++.

Sukai private anggota, protected anggota tidak dapat diakses di luar kelas. Namun, mereka dapat diakses oleh kelas turunan dan kelas/fungsi teman .

Kami membutuhkan protected anggota jika kita ingin menyembunyikan data suatu kelas, tetapi tetap ingin data tersebut diwarisi oleh kelas turunannya.

Untuk mempelajari lebih lanjut tentang protected, lihat tutorial C++ Access Modifiers kami.


Contoh 2 :Anggota yang dilindungi C++

// C++ program to demonstrate protected members

#include <iostream>
#include <string>
using namespace std;

// base class
class Animal {

   private:
    string color;

   protected:
    string type;

   public:
    void eat() {
        cout << "I can eat!" << endl;
    }

    void sleep() {
        cout << "I can sleep!" << endl;
    }

    void setColor(string clr) {
        color = clr;
    }

    string getColor() {
        return color;
    }
};

// derived class
class Dog : public Animal {

   public:
    void setType(string tp) {
        type = tp;
    }

    void displayInfo(string c) {
        cout << "I am a " << type << endl;
        cout << "My color is " << c << endl;
    }

    void bark() {
        cout << "I can bark! Woof woof!!" << endl;
    }
};

int main() {
    // Create object of the Dog class
    Dog dog1;

    // Calling members of the base class
    dog1.eat();
    dog1.sleep();
    dog1.setColor("black");

    // Calling member of the derived class
    dog1.bark();
    dog1.setType("mammal");

    // Using getColor() of dog1 as argument
    // getColor() returns string data
    dog1.displayInfo(dog1.getColor());

    return 0;
}

Keluaran

I can eat!
I can sleep!
I can bark! Woof woof!!
I am a mammal
My color is black

Di sini, variabel type adalah protected dan dengan demikian dapat diakses dari kelas turunan Dog . Kita dapat melihat ini karena kita telah menginisialisasi type di Dog kelas menggunakan fungsi setType() .

Sebaliknya, private variabel warna tidak dapat diinisialisasi dalam Dog .

class Dog : public Animal {

    public:
      void setColor(string clr) {
          // Error: member "Animal::color" is inaccessible
          color = clr; 
      }
};

Juga, karena protected kata kunci menyembunyikan data, kami tidak dapat mengakses type langsung dari objek Dog atau Animal kelas.

// Error: member "Animal::type" is inaccessible
dog1.type = "mammal";

Mode Akses dalam Warisan C++

Dalam tutorial kami sebelumnya, kami telah mempelajari tentang penentu akses C++ seperti publik, pribadi, dan dilindungi.

Sejauh ini, kami telah menggunakan public kata kunci untuk mewarisi kelas dari kelas dasar yang sudah ada sebelumnya. Namun, kita juga dapat menggunakan private dan protected kata kunci untuk mewarisi kelas. Misalnya,

class Animal {
    // code
};

class Dog : private Animal {
    // code
};
class Cat : protected Animal {
    // code
};

Berbagai cara kita dapat memperoleh kelas dikenal sebagai mode akses . Mode akses ini memiliki efek sebagai berikut:

  1. publik: Jika kelas turunan dideklarasikan dalam public mode, maka anggota kelas dasar diwarisi oleh kelas turunan sebagaimana adanya.
  2. pribadi: Dalam hal ini, semua anggota kelas dasar menjadi private anggota di kelas turunan.
  3. dilindungi: public anggota kelas dasar menjadi protected anggota di kelas turunan.

private anggota kelas dasar selalu private di kelas turunan.

Untuk mempelajari lebih lanjut, kunjungi tutorial pewarisan C++ publik, pribadi, dan terproteksi kami.


Penggantian Fungsi Anggota dalam Warisan

Misalkan, kelas dasar dan kelas turunan memiliki fungsi anggota dengan nama dan argumen yang sama.

Jika kita membuat objek dari kelas turunan dan mencoba mengakses fungsi anggota itu, fungsi anggota di kelas turunan akan dipanggil alih-alih yang ada di kelas dasar.

Fungsi anggota dari kelas turunan menggantikan fungsi anggota dari kelas dasar.

Pelajari lebih lanjut tentang Penggantian fungsi di C++.


Bacaan yang Disarankan: C++ Multiple Inheritance


Bahasa C

  1. C# Kata Kunci statis
  2. C# Kelas Bersarang
  3. Operator C++
  4. Kelas dan Objek C++
  5. C++ Warisan Publik, Dilindungi, dan Pribadi
  6. Template Kelas C++
  7. Warisan Python
  8. Kelas Penyimpanan di C++
  9. Polimorfisme dalam C++
  10. Abstraksi Data dalam C++