1. for va foreach sikllari


Download 65.67 Kb.
bet24/49
Sana19.06.2023
Hajmi65.67 Kb.
#1625730
1   ...   20   21   22   23   24   25   26   27   ...   49
Bog'liq
дəстурлеу жуаплары100

34. Polimorfizm
Polimorfizm, bir sinfning bitta funksiyasining birdan ko'p usulda ishlatilishini ta'minlaydigan yordamdir. Bu, kodni qayta ishlashni va kodni yangilashni yengillikka olib keladi.
Polimorfizmning bir qancha xil usullari mavjud, ammo C++ dasturiy tili virtual funksiyalar yordamida polimorfizmni ta'minlaydi. Virtual funksiyalar, sinflar orqali bir-biri bilan bog'lanishni yengillikka olib keladi.
Misol uchun, quyidagi kodda Animal nomli bazaviy sinf va undan Dog va Cat nomli voris sinflar yaratilgan. speak() nomli virtual funksiya Animal sinfida yaratilgan. Dog va Cat sinflari esa speak() funksiyasini o'zgartirgan. Natijada, Animal sinfindan ob'ekt yaratiladi va Dog va Cat sinflaridan ham ob'ekt yaratiladi. Har bir ob'ekt speak() funksiyasini chaqiradi.
C++
#include
class Animal {
public:
virtual void speak() {
std::cout << "This is an animal." << std::endl;
}
};
class Dog : public Animal {
public:
void speak() override {
std::cout << "This is a dog." << std::endl;
}
};
class Cat : public Animal {
public:
void speak() override {
std::cout << "This is a cat." << std::endl;
}
};
int main() {
Animal* animal = new Animal();
Animal* dog = new Dog();
Animal* cat = new Cat();
animal->speak();
dog->speak();
cat->speak();
delete animal;
delete dog;
delete cat;
return 0;
}
Natijada, Animal sinfida speak() funksiyasi standart xususiyatiga ega bo'ladi, Dog sinfida esa funksiya o'zgartirilgan va yangi natija konsolga chiqariladi, Cat sinfida esa ham funksiya o'zgartirilgan va yangi natija konsolga chiqariladi. Shunday qilib, polimorfizmning yordamida bir funksiya bir necha sinflarda foydalanilishiga imkon beriladi.
35. Tiplarni dinamik keltirish. dynamic_cast operatori
C++ dasturiy tili, tipni dinamik keltirish uchun dynamic_cast operatorini taqdim etadi. dynamic_cast operatori, tipni dinamik ravishda keltirish uchun ishlatiladi, ya'ni bitta sinfdan boshqa bir sinfga o'girishda yoki polimorfizmni yaxshiroq ishlatishda foydalaniladi.
dynamic_cast operatori, turli turli sinflarni bir-biriga o'girish va ularning interfeyslarini o'rganish uchun ishlatiladi. dynamic_cast operatori, bir sinf ob'ektini boshqa bir sinfga o'girishdan oldin, o'zgaruvchini tekshiradi va uni kerakli turga keltiradi. Agar o'girish amalga oshirilsa, dynamic_cast operatori null qiymat qaytaradi.
Quyidagi misol Person va Student nomli sinflarni ko'rsatadi. Person sinfi, ism va yosh xususiyatlariga ega bo'ladi, Student sinfi esa Person sinfiga kiradi va unda yana major nomli yana bir xususiyat bor. dynamic_cast operatori yordamida Person ob'ektini Student ob'ektiga o'girishni ko'rsatamiz:
C++
#include
class Person {
public:
std::string name;
int age;
virtual void displayInfo() {
std::cout << "Name: " << name << std::endl;
std::cout << "Age: " << age << std::endl;
}
};
class Student : public Person {
public:
std::string major;
void displayInfo() override {
std::cout << "Name: " << name << std::endl;
std::cout << "Age: " << age << std::endl;
std::cout << "Major: " << major << std::endl;
}
};
int main() {
Person* person = new Person();
person->name = "John Doe";
person->age = 30;
Student* student = dynamic_cast(person);
if (student == nullptr) {
std::cout << "Person object cannot be cast to Student object." << std::endl;
} else {
student->major = "Computer Science";
student->displayInfo();
}
delete person;
return 0;
}
Bu kodda, Person sinfindan ob'ekt yaratiladi va name va age xususiyatlari o'rniga qiymatlar beriladi. Quyidagi qatorda Person ob'ektini Student ob'ektiga o'girish amalga oshiriladi:
C++
Student* student = dynamic_cast(person);
Agar o'girish amalga oshirilmasa, dynamic_cast operatori nullptr qiymat qaytaradi. Aks holda, Student sinfida yaratilgan major xususiyatiga qiymat beriladi va displayInfo() funksiyasi chaqiriladi. Natijada, konsolga to'g'ridan-to'g'ri ob'ektning ism, yosh va major xususiyatlari chiqadi.
Bu misol, dynamic_cast operatorining ishlatilishi va uning shakllari haqida yaxshi tushuncha beradi.

Download 65.67 Kb.

Do'stlaringiz bilan baham:
1   ...   20   21   22   23   24   25   26   27   ...   49




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling