Pure Virtual Function in C++:
यदि हम Compiler को ये Instruction दे सकें कि वह किसी Class User को Abstract Class का Object Create ही ना करने दे, तो ये इस समस्या का एक सही समाधान होगा। इस तरीके से हम ज्यादा स्वतंत्रता से Base Classes Design कर सकते हैं, क्योंकि हमें Actual Objects के लिए Plan या Modal बनाने की जरूरत नहीं होगी बल्कि हमें केवल वे Data व Functions ही इस Class के लिए Modal करने पडेंगे, जिनका प्रयोग Derived Classes में किया जाएगा।
हम ये काम Pure Virtual Functions द्वारा कर सकते हैं। यानी Class में Pure Virtual Functions Create करके Compiler को ये बता सकते हैं कि वह Abstract Class के Object Create करने की सुविधा Class User को प्रदान ना करे।
Pure Virtual Function एक ऐसा Function होता है जिसकी Body नहीं होती है और Function Declaration में Notation = 0 Add किया जाता है। चलिए, इसका एक Demo उदाहरण देखते हैं।
?
// Pure Virtual Function
#include
#include
class BaseClass
// base class
{
public:
virtual void show() = 0;
// pure virtual function
};
class DerivedClass1 :
public Base
// derived class 1
{
public:
void show()
{
cout << “\nDerivedClass1";
}
};
class DerivedClass2 :
public Base
// derived class 2
{
public:
void show()
{
cout << “\nDerivedClass2";
}
};
void main()
{
DerivedClass1 dv1;
// object of derived class 1
DerivedClass2 dv2;
// object of derived class 2
// BaseClass ba;
// Error: cannot create instance of abstract base class
}
इस उदाहरण में Virtual Function को निम्नानुसार Declare किया गया है:
virtual void show() = 0;
// Pure Virtual Function
इस Statement में मान 0 कुछ भी नहीं करता है। ये मान Function में किसी को भी Assign नहीं होता है। यहां =0 Statement का मतलब Compiler को केवल ये बताना है कि ये एक Pure Virtual Function है, जिसकी कोई Body नहीं है। यदि हम shape Class को Pure Virtual Function के साथ Develop करना चाहें, तो निम्नानुसार इस Class में परिवर्तन करके Class को Abstract Class में परिवर्तित कर सकते हैं:
// Draws shapes made from Xs on character-based display
// uses Pure Virtual draw() Function in BaseClass
#include
#include
class shape
{
private:
int xCo, yCo; // coordinates of shape
int size; // size of shape
protected: // read-only functions
int getx() const { return xCo; }
int gety() const { return yCo; }
int getz() const { return size; }
void down() const; // declaration
public:
// 3-arg constructor
shape(int x, int y, int s) : xCo(x), yCo(y), size(s){ }
virtual void draw() const = 0; // pure virtual function
};
void shape::down() const // move cursor down to top of shape
{
for(int y=0; y
cout << endl;
}
class square : public shape // square shape
{
public: // 3-arg constructor
square(int x, int y, int s) : shape(x, y, s){ }
void draw() const; // declaration
};
void square::draw() const // draw a square
{
shape::down(); // position y at top of shape
for(int y=0; y // move y down across shape
{
int x;
for(x=1; x // space over to shape
cout << ' ';
for(x=0; x // draw line of Xs
cout << 'X';
cout << endl;
}
}
No comments:
Post a Comment