C++ funksiyani qayta aniqlash
Ma'lumki, inheritance OOP xususiyati bo'lib, u bizga class bazasidan olingan sinflarni yaratish imkonini beradi. Olingan sinflar asosiy sinfning xususiyatlarini meros qilib oladi.
Aytaylik, biz bir xil function ni asosiy sinfda ham, olingan sinfda ham aniqlaymiz. Endi bu funksiyani hosila sinf ob'ekti yordamida chaqirganimizda, hosila sinfning funksiyasi bajariladi.
Bu erda olingan sinfdagi a'zo funksiyasi asosiy sinfdagi a'zo funksiyasini soya qiladi. Bu asosiy sinf a'zosi funksiyasini soya qilish deb ataladi
// Soyali asosiy sinf a'zolari funksiyasini namoyish qilish uchun C++ dasturi
#include <iostream>
using namespace std;
class Base {
public:
void print() {
cout << "Base Function" << endl;
}
};
class Derived : public Base {
public:
void print() {
cout << "Derived Function" << endl;
}
};
int main() {
Derived derived1;
derived1.print();
return 0;
}
Chiqish
Derived Function
Bu erda print() funksiyasi Base va Derived sinflarida ham aniqlanadi.
Shunday qilib, biz Derived obyektidan print() ni derived1 deb chaqirganimizda, Derived dan print() Base funksiyasini soya qilish orqali bajariladi.
Working of function Shadowing in C++

Ko'rib turganimizdek, funksiya soyali edi, chunki biz funksiyani Derived sinfining ob'ektidan chaqirdik.
Agar biz print() funksiyasini Base sinfidagi ob'ektdan chaqirganimizda, funksiya soyada qolmagan bo'lardi.
// Base sinfining chaqiruv funksiyasi
Base base1;
base1.print(); // Chiqish: Asosiy funksiya
Asosiy sinfning soyali funksiyasiga kirish uchun biz :: diapazonini aniqlash operatoridan foydalanamiz.
Biz, shuningdek, olingan sinf ob'ektiga ishora qilish uchun asosiy sinfning pointer -dan foydalanib, so'ngra ushbu ko'rsatgichdan funksiyani chaqirish orqali soyali funksiyaga kirishimiz mumkin.
// Soyali funksiyaga kirish uchun C++ dasturi
// main() da miqyosni aniqlash operatori yordamida ::
#include <iostream>
using namespace std;
class Base {
public:
void print() {
cout << "Base Function" << endl;
}
};
class Derived : public Base {
public:
void print() {
cout << "Derived Function" << endl;
}
};
int main() {
Derived derived1, derived2;
derived1.print();
// Base sinning print() funksiyasiga kirish
derived2.Base::print();
return 0;
}
Chiqish
Derived Function
Base Function
Mana, operator
derived2.Base::print();
Base sinfining print() funksiyasiga kiradi.
Access Shadowed function using object of derived class in C++

// Soyali funksiyani chaqirish uchun C++ dasturi
// olingan sinfning a'zo funksiyasidan
#include <iostream>
using namespace std;
class Base {
public:
void print() {
cout << "Base Function" << endl;
}
};
class Derived : public Base {
public:
void print() {
cout << "Derived Function" << endl;
// bekor qilingan funksiyani chaqirish
Base::print();
}
};
int main() {
Derived derived1;
derived1.print();
return 0;
}
Chiqish
Derived Function
Base Function
Ushbu dasturda biz Derived sinfining o'zida asosiy sinf a'zosi funksiyasini chaqirdik.
class Derived : public Base {
public:
void print() {
cout << "Derived Function" << endl;
Base::print();
}
};
Derived sinfidagi Base sinfidan print() a'zo funksiyasini chaqiradigan Base::print(); kodiga e'tibor bering.
Access overridden function inside derived class in C++

// Pointer yordamida soyali funksiyaga kirish uchun C++ dasturi
// Derived sinfining ob'ektiga ishora qiluvchi asosiy turdagi
#include <iostream>
using namespace std;
class Base {
public:
void print() {
cout << "Base Function" << endl;
}
};
class Derived : public Base {
public:
void print() {
cout << "Derived Function" << endl;
}
};
int main() {
Derived derived1;
// olingan1 ga ishora qiluvchi Baza tipidagi ko'rsatkich
Base* ptr = &derived1;
// ptr yordamida asosiy sinfning chaqiruv funksiyasi
ptr->print();
return 0;
}
Chiqish
Base Function
Ushbu dasturda biz ptr nomli Base tipidagi ko'rsatkich yaratdik. Bu ko'rsatkich olingan Derived obyektiga ishora qiladi1.
// olingan1 ga ishora qiluvchi Baza tipidagi ko'rsatkich
Base* ptr = &derived1;
print() funksiyasini ptr yordamida chaqirganimizda, u Base dan a'zo funksiyani chaqiradi.
// ptr yordamida asosiy sinfning chaqiruv funksiyasi
ptr->print();
Buning sababi, ptr Derived ob'ektiga ishora qilsa ham, u aslida Base turiga tegishli. Shunday qilib, u Base a'zo funksiyasini chaqiradi.
Base funksiyasiga kirish o‘rniga uni bekor qilish uchun Base sinfida virtual functions dan foydalanishimiz kerak.