जैसा कि कहा गया है, एनवीआई एक प्रख्यात मुहावरे है, जो भाषाओं की एक श्रेणी से संबंधित है। यह दूसरों के बीच हर्ब Sutter द्वारा पदोन्नत किया गया है, क्योंकि यह लागू करने के ठेके में मदद करता है:
- वर्ग अपरिवर्तनशीलताओं
- समारोह ठेके
- दोहराए परिचालन (प्रवेश) की तरह (पैरामीटर पारित कर दिया और उत्पन्न वापसी मान से अधिक दावे)
उत्पन्न अपवाद से अधिक
- नियंत्रण (बुरा विचार है, हालांकि;))
हालांकि, कार्यान्वयन वास्तव में काफी, भिन्न हो सकती है उदाहरण NVI का एक और उदाहरण के लिए कार्यान्वयन Pimpl के साथ गठबंधन करने के लिए है:
class FooImpl;
class Foo
{
public:
enum type { Type1, Type2 };
Foo(type t, int i, int j);
int GetResult() const;
private:
FooImpl* mImpl;
};
और कार्यान्वयन के लिए:
struct FooImpl
{
virtual ~FooImpl();
virtual int GetResult() const;
};
class FooType1: public FooImpl
{
public:
FooType1(int i, int j);
virtual int GetResult() const;
private:
/// ...
};
मैं हमेशा पाया है कि यह बात बेहतर जानकारी दी। क्या आपने इसे समझ लिया है?
मुख्य बिंदु यह है कि virtual
एक कार्यान्वयन विवरण है। और इंटरफ़ेस में कार्यान्वयन विवरण का खुलासा करना एक बुरा विचार है, क्योंकि आप उन्हें बदलना चाहते हैं।
इसके अलावा कार्यान्वयन विवरण बाइनरी संगतता के साथ गड़बड़ कर रहे हैं। उदाहरण के लिए कक्षा में एक नया virtual
विधि जोड़ना वर्चुअल टेबल (सामान्य कार्यान्वयन तकनीकी) का लेआउट बदल सकता है और इस प्रकार बाइनरी संगतता को बोच सकता है। जीसीसी पर आपको यह सुनिश्चित करने की ज़रूरत है कि यदि आप संगतता को संरक्षित करना चाहते हैं तो आप इसे अंतिम (वर्चुअल के बीच) जोड़ दें।
उपरोक्त एनवीआई + पिंपल संयोजन का उपयोग करके, कक्षा 12 में कोई भी virtual
बिल्कुल (निजी भी नहीं) है। मेमोरी लेआउट पिछड़ा और आगे संगत है। हमने बाइनरी संगतता प्राप्त की है।
यहाँ, हम एक बार में कई पैटर्न का उपयोग करें:
- टेम्पलेट विधि
- रणनीति
- फैक्टरी (जो कार्यान्वयन पर हम पाते हैं तय करने के लिए)
(के बाद से हम अपनी इच्छा से सूचक स्वैप कर सकते हैं)
स्रोत
2010-06-20 11:11:47
मैं संदर्भ के रूप में विकिपीडिया लिंक का उपयोग नहीं करता, ताले का उपयोग अपवादों के सामने भंगुर है ... –