C++ abstrakt sinf va sof virtual funksiyalar
Sof virtual funksiyalar haqida bilishdan oldin, ushbu qo'llanmalarni tekshiring:
Sof virtual funksiyalardan foydalaniladi
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,
class Shape {
public:
// sof virtual funksiyani yaratish
virtual void calculateArea() = 0;
};
[!NOTE]
= 0sintaksisi biz funksiyaga 0 qo'yganimizni anglatmaydi. Bu biz sof virtual funksiyalarni aniqlaydigan usul.
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).
// 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
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.