Latest web development tutorials

C ++ warisan

pemrograman berorientasi objek adalah konsep yang paling penting diwariskan. Warisan memungkinkan kita untuk mendefinisikan kelas untuk dasar kelas lain, yang membuat menciptakan dan memelihara aplikasi lebih mudah. Untuk melakukannya, juga mencapai penggunaan kembali fungsi kode dan meningkatkan hasil waktu eksekusi.

Ketika Anda membuat kelas, Anda tidak perlu menulis ulang data anggota dan fungsi anggota baru, hanya menentukan kelas baru mewarisi anggota yang ada kelas dapat. Kelas yang ada disebutkelas dasar, kelas baru ini disebut kelas turunan.

Warisan adalah perwakilan dari hubungan.Misalnya, mamalia adalah hewan, anjing adalah mamalia, oleh karena itu, anjing adalah hewan, dan sebagainya.

& Berasal kelas dasar kelas

Sebuah kelas dapat diturunkan dari lebih dari satu kelas, yang berarti bahwa hal itu dapat mewarisi data dan fungsi dari beberapa kelas dasar. Mendefinisikan kelas turunan, kita menggunakan daftar kelas turunan untuk menentukan kelas dasar. Kelas daftar derivasi ke kelas satu atau lebih basis bernama bentuk berikut:

class derived-class: access-specifier base-class

Dimana akses modifier akses-specifier adalahpublik, dilindungi atau satu pribadi,dasar kelas didefinisikan sebelum nama kelas. Jika tidak ada akses modifier akses-specifier, defaultnya adalah pribadi.

Misalkan Anda memilikiShapekelasdasar,Rectangle kelas turunan, sebagai berikut:

#include <iostream>
 
using namespace std;

// 基类
class Shape 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
};

// 派生类
class Rectangle: public Shape
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
};

int main(void)
{
   Rectangle Rect;
 
   Rect.setWidth(5);
   Rect.setHeight(7);

   // 输出对象的面积
   cout << "Total area: " << Rect.getArea() << endl;

   return 0;
}

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

Total area: 35

kontrol akses dan warisan

kelas turunan dapat mengakses kelas dasar untuk semua anggota non-pribadi. Jadi jika Anda ingin menjadi anggota dari fungsi anggota kelas dasar dari akses kelas turunan harus dinyatakan di kelas dasar pribadi.

Kita dapat meringkas hak akses yang berbeda sesuai dengan jenis akses, sebagai berikut:

访问publicprotectedprivate
同一个类yesyesyes
派生类yesyesno
外部的类yesnono

Sebuah kelas turunan mewarisi semua metode kelas dasar, kecuali dalam keadaan berikut:

  • kelas dasar constructor dan destructor dan copy constructor.
  • operator overload kelas dasar.
  • Teman dari fungsi kelas dasar.

Jenis warisan

Ketika kelas berasal dari kelas dasar, kelas dasar dapat diwariskan sebagaipublik, dilindungi atau jenis pribadi.Melalui penjelasan di atas diwariskan jenis akses modifier akses-specifier untuk menentukan.

Kami hampir tidak menggunakandilindungi atau warisan pribadibiasanya digunakan warisanpublik.Ketika berbagai jenis warisan, mengikuti aturan berikut:

  • anggota kelasdilindungi ketika kelas berasal dari kelas dasar umum,anggotamasyarakatdari kelas dasar berasal anggotamasyarakatdari kelas, anggotadilindungidari kelas dasar adalah kelas turunan,paraanggotapribadidari kelas dasar tidak dapat langsungditurunkan: warisan publik (public)akses, namun dapat diaksesdenganmemanggil anggotamasyarakatdandilindungidari kelas dasar.
  • Dilindungi warisan (dilindungi): Ketika sebuah kelas turunan dari perlindungankelasdasar,anggota masyarakat dandilindungidari kelas dasar akan menjadi anggotadilindungi darikelas turunan.
  • warisan pribadi (swasta): Ketika kelas berasal dari kelas dasar anggota swasta,publik dandilindungidari kelas dasar akan menjadi anggotapribadidari kelas turunan.

beberapa Warisan

Multiple inheritance yaitu, subclass dapat memiliki lebih dari satu kelas induk yang mewarisi karakteristik kelas lebih dari satu orang tua.

C ++ class dapat mewarisi dari lebih dari satu anggota kelas sintaks berikut:

class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
{
<派生类类体>
};

Dimana warisan akses pengubahpublik, dilindungi atau satu pribadi,digunakan untuk menghias setiap kelas dasar, kelas dasar antara masing-masing dipisahkan dengan tanda koma, seperti yang ditunjukkan di atas. Sekarang mari kita lihat contoh berikut:

#include <iostream>
 
using namespace std;

// 基类 Shape
class Shape 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
};

// 基类 PaintCost
class PaintCost 
{
   public:
      int getCost(int area)
      {
         return area * 70;
      }
};

// 派生类
class Rectangle: public Shape, public PaintCost
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
};

int main(void)
{
   Rectangle Rect;
   int area;
 
   Rect.setWidth(5);
   Rect.setHeight(7);

   area = Rect.getArea();
   
   // 输出对象的面积
   cout << "Total area: " << Rect.getArea() << endl;

   // 输出总花费
   cout << "Total paint cost: $" << Rect.getCost(area) << endl;

   return 0;
}

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

Total area: 35
Total paint cost: $2450