Virtual funksiyalar
C++ virtual funksiyalar
Virtual funksiya — asosiy sinfdagi a’zo funksiya bo‘lib, uni hosila sinflarda qayta aniqlash (override) mumkin.
Virtual funksiyalar C++ tilidagi polimorfizmning asosiy qismidir. Ular turli obyektlarga bitta funksiya chaqiruviga turlicha javob berish imkonini beradi.
Nima uchun virtual funksiyalardan foydalaniladi?
virtual bo‘lmasa, C++ qaysi funksiyani chaqirishni obyektning haqiqiy tipiga qarab emas, balki ko‘rsatkich tipiga qarab hal qiladi.
virtual bilan esa u ko‘rsatkich ko‘rsatayotgan haqiqiy obyektni tekshiradi.
Yoki yanada soddaroq qilib aytganda:
virtualbo‘lmasa: obyekt farzand sinfga tegishli bo‘lsa ham, asosiy sinf funksiyasi ishlaydi.virtualbilan: siz kutganingizdek farzand sinfdagi variant ishlaydi.
Virtual funksiyasiz
Misol (virtual kalit so‘zisiz)
class Animal {
public:
void sound() {
cout << "Animal sound\n";
}
};
class Dog : public Animal {
public:
void sound() {
cout << "Dog barks\n";
}
};
int main() {
Animal* a; // Declare a pointer to the base class (Animal)
Dog d; // Create an object of the derived class (Dog)
a = &d; // Point the base class pointer to the Dog object
a->sound(); // Call the sound() function using the pointer. Since sound() is not virtual, this calls Animal's version
return 0;
}
O‘zingiz sinab ko‘ring »
a ko‘rsatkichi Dog obyektini ko‘rsatib tursa-da, funksiya virtual bo‘lmagani uchun baribir Animal::sound() chaqiriladi.
Virtual funksiya bilan
Misol (virtual kalit so‘zi bilan)
class Animal {
public:
virtual void sound() {
cout << "Animal sound\n";
}
};
class Dog : public Animal {
public:
void sound() override {
cout << "Dog barks\n";
}
};
int main() {
Animal* a;
Dog d;
a = &d;
a->sound(); // Outputs: Dog barks
return 0;
}
O‘zingiz sinab ko‘ring »
Endi ishlaydi! sound() funksiyasi virtual bo‘lgani uchun chaqiruv shunchaki ko‘rsatkich tipidagi emas, balki haqiqiy obyektdagi funksiyadan foydalanadi.
virtualkalit so‘zini faqat asosiy sinfda ishlating- Aniqlik uchun hosila sinfda
overridekalit so‘zini ishlating (ixtiyoriy, lekin tavsiya etiladi)
C++ tilidagi -> operatori
Yuqoridagi misollarda nega -> ishlatganimiz sizni qiziqtirayotgan bo‘lishi mumkin.
-> operatori a’zolarga (funksiyalar yoki o‘zgaruvchilar kabi) ko‘rsatkich orqali murojaat qilish uchun ishlatiladi.
Bu (*pointer).member yozuvining qisqa shakli:
Animal* a = new Animal();
a->sound(); // Same as (*a).sound();
Maslahat: Agar obyektga ko‘rsatkichdan foydalanayotgan bo‘lsangiz, uning a’zolariga murojaat qilish uchun -> operatorini ishlating.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
