Latest web development tutorials

C ++ antarmuka (kelas abstrak)

Ini menggambarkan perilaku antarmuka dan kelas fungsional, tanpa perlu menyelesaikan kelas implementasi tertentu.

C ++ antarmuka diimplementasikan menggunakankelas abstrak, kelas abstrak dan tidak harus bingung dengan abstraksi data, abstraksi data adalah konsep rincian pelaksanaan yang terkait dengan data dipisahkan.

Jika setidaknya satu kelas fungsi dinyatakan sebagai fungsi virtual murni, maka kelas ini adalah kelas abstrak. fungsi virtual murni dengan menggunakan "= 0" dalam laporan yang ditentukan, sebagai berikut:

class Box
{
   public:
      // 纯虚函数
      virtual double getVolume() = 0;
   private:
      double length;      // 长度
      double breadth;     // 宽度
      double height;      // 高度
};

Merancangsebuah kelas abstrak (sering disebut sebagai ABC) Tujuannya adalah untuk memberikan yang lain kelas dapat mewarisi kelas dasar yang tepat.Kelas abstrak tidak dapat digunakan untuk instantiate objek, hanya dapat digunakansebagai interface.Jika Anda mencoba untuk instantiate objek dari kelas abstrak, itu akan mengakibatkan kesalahan kompilasi.

Oleh karena itu, jika ABC subclass yang dipakai, Anda harus menerapkan setiap fungsi virtual, itu juga berarti bahwa C ++ mendukung penggunaan antarmuka pernyataan ABC. Jika tidak ada overloading fungsi virtual murni di kelas turunan, mencoba untuk instantiate sebuah objek dari kelas ini akan menyebabkan kesalahan kompilator.

Kelas dapat digunakan untuk instantiate objek disebutkelas konkret.

Contoh dari kelas abstrak

Perhatikan contoh berikut, Shape kelas dasar memberikanGetArea antarmuka (),dua kelas yang berasal Rectangle dan Segitiga direalisasikan dalamGetArea ():

#include <iostream>
 
using namespace std;
 
// 基类
class Shape 
{
public:
   // 提供接口框架的纯虚函数
   virtual int getArea() = 0;
   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); 
   }
};
class Triangle: public Shape
{
public:
   int getArea()
   { 
      return (width * height)/2; 
   }
};
 
int main(void)
{
   Rectangle Rect;
   Triangle  Tri;
 
   Rect.setWidth(5);
   Rect.setHeight(7);
   // 输出对象的面积
   cout << "Total Rectangle area: " << Rect.getArea() << endl;

   Tri.setWidth(5);
   Tri.setHeight(7);
   // 输出对象的面积
   cout << "Total Triangle area: " << Tri.getArea() << endl; 

   return 0;
}

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

Total Rectangle area: 35
Total Triangle area: 17

Dari contoh di atas, kita dapat melihat bagaimana sebuah kelas abstrak adalah untuk mendefinisikan GetArea antarmuka (), dua kelas yang diturunkan adalah bagaimana menghitung luas algoritma yang berbeda untuk mencapai fungsi yang sama.

Strategi desain

sistem berorientasi objek dapat menggunakan kelas dasar abstrak menyediakan, generik, antarmuka standar yang sesuai untuk semua aplikasi eksternal. Kemudian, kelas turunan dengan mewarisi dari kelas dasar abstrak, menempatkan semua operasi tersebut diwariskan.

Fungsi (yaitu fungsi publik) aplikasi eksternal yang disediakan dalam bentuk kelas dasar abstrak fungsi virtual murni ada. Fungsi-fungsi virtual murni diimplementasikan di kelas turunan yang sesuai.

Arsitektur ini juga memungkinkan aplikasi baru dapat dengan mudah ditambahkan ke sistem, bahkan setelah sistem ini masih dapat begitu didefinisikan.