14-ma’ruza. Sinfning virtual metodlari va ularni ishlatish mexanizmlari. Abstrakt sinflar, ularning mo’ljallanishi va xususiyatlari


Ta'riflar bilan sof virtual funktsiyalar



Yüklə 31,62 Kb.
səhifə5/6
tarix02.12.2022
ölçüsü31,62 Kb.
#71888
1   2   3   4   5   6
14 ma’ruza Sinfning virtual metodlari va ularni ishlatish mexanizmlari

Ta'riflar bilan sof virtual funktsiyalar. Ma'lum bo'lishicha, biz sof virtual funksiyalarni aniqlashimiz mumkin:
#include
#include
class Animal // bu abstrakt sinf
{
protected:
std::string m_name;
public:
Animal(std::string name)
: m_name(name)
{
}
std::string getName() { return m_name; }
virtual const char* speak() = 0; // “= 0” qiymatini belgilash bu funksiya
//sof virtual funksiya ekanligini bildiradi
};
const char* Animal::speak() // bu yerda uning ta'rifi bo'lishiga qaramay
{
return "buzz";
}

Bunday holda, speak () hali ham sof virtual funktsiya hisoblanadi (garchi biz uni keyinroq aniqlagan bo'lsak-da) va Animal hali ham abstrakt ajdod-sinf hisoblanadi (shuning uchun bu sinf obyektlarini initsializatsiyalash mumkin emas). Animal sinfidan meros bo'lgan har qanday sinf speak() metodini qayta aniqlashi kerak yoki u ham abstrakt sinf hisoblanadi.


Sof virtual funktsiyani belgilashda uning tanasi (ta'rifi) alohida yozilishi kerak (inline emas).
Bu avlod sinflari virtual funksiyani qayta aniqlashi yoki standart dasturni (ajdod sinfi taqdim etgan) tark etishini xohlasangiz foydali bo'ladi. Agar avlod sinfi standart dasturdan mamnun bo'lsa, u uni to'g'ridan-to'g'ri chaqirishi mumkin. Masalan:

#include


#include
using namespace std;
class Animal{ //bu abstrakt sinf;
protected:
string m_name;

public:
Animal(string name)


: m_name(name)
{
}

string getName() { return m_name; }


virtual const char* speak() = 0; //sof virtual funksiya
};

const char* Animal::speak()


{
return "buzz"; // jimlik bo'yicha realizatsiya
}

class Dragonfly: public Animal


{

public:
Dragonfly(string name)


: Animal(name)
{
}

virtual const char* speak()


{
return Animal::speak(); // Animal sinfining jimlik bo'yicha
//amalga oshirilishi qo'llaniladi
}
};

int main()


{
Dragonfly dfly("Barbara");
cout << dfly.getName() << " " << dfly.speak() <<" deydi";
}

Dasturni bajarish natijasi:


Barbara buzz deydi





Yüklə 31,62 Kb.

Dostları ilə paylaş:
1   2   3   4   5   6




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin