51 / 90

C++ Pure Virtual Functions & Abstract Classes

C++ abstrakt sinf va sof virtual funksiyalar

Sof virtual funksiyalar haqida bilishdan oldin, ushbu qo'llanmalarni tekshiring:

C++ sof virtual funksiyalari

Sof virtual funksiyalardan foydalaniladi

  • agar funksiya asosiy sinfda foydalanmasa
  • lekin funksiya uning barcha hosila sinflari tomonidan amalga oshirilishi kerak

Misol olaylik,

Aytaylik, biz Shape sinfidan Triangle , Square va Circle sinflarini oldik va biz bu barcha shakllarning maydonini hisoblamoqchimiz.

Bunday holda, biz Shape da calculateArea() nomli sof virtual funksiyani yaratishimiz mumkin. Bu sof virtual funksiya bo'lgani uchun, Triangle , Square va Circle barcha olingan sinflar amalga oshirish bilan birga calculateArea() funksiyasini o'z ichiga olishi kerak.

Sof virtual funksiya funksiya tanasiga ega emas va u = 0 bilan tugashi kerak. Masalan,

example.cpp
class Shape {
    public:

      // sof virtual funksiyani yaratish
      virtual void calculateArea() = 0;
};

[!NOTE] = 0 sintaksisi biz funksiyaga 0 qo'yganimizni anglatmaydi. Bu biz sof virtual funksiyalarni aniqlaydigan usul.

Abstrakt sinf

Sof virtual funksiyani o'z ichiga olgan sinf mavhum sinf sifatida tanilgan. Yuqoridagi misolda Shape sinfi mavhum sinfdir.

Biz mavhum sinf ob'ektlarini yarata olmaymiz. Biroq, biz ulardan sinflarni olishimiz va ularning ma'lumotlar a'zolari va a'zo funksiyalaridan foydalanishimiz mumkin (sof virtual funksiyalardan tashqari).

Misol: C++ abstrakt klassi va sof virtual funksiya

example.cpp
// Kvadrat va aylana maydonini hisoblash uchun C++ dasturi

#include <iostream>
using namespace std;

// Abstrakt sinf
class Shape {
   protected:
    float dimension;

   public:
    void getDimension() {
        cin >> dimension;
    }

    // sof virtual funksiya
    virtual float calculateArea() = 0;
};

// Olingan sinf
class Square : public Shape {
   public:
    float calculateArea() {
        return dimension * dimension;
    }
};

// Olingan sinf
class Circle : public Shape {
   public:
    float calculateArea() {
        return 3.14 * dimension * dimension;
    }
};

int main() {
    Square square;
    Circle circle;

    cout << "Enter the length of the square: ";
    square.getDimension();
    cout << "Area of square: " << square.calculateArea() << endl;

    cout << "\nEnter radius of the circle: ";
    circle.getDimension();
    cout << "Area of circle: " << circle.calculateArea() << endl;

    return 0;
}

Chiqish

kod
Enter the length of the square: 4
Area of square: 16

Enter radius of the circle: 5
Area of circle: 78.5

Ushbu dasturda Shape sinfidagi virtual float calculateArea() = 0; sof virtual funksiyadir.

Shuning uchun biz calculateArea() ni ikkala hosila sinfimizda amalga oshirishni ta'minlashimiz kerak, aks holda biz xatoga yo'l qo'yamiz.