मैं कुछ मूलभूत जानकारी को व्युत्पन्न कक्षा में इंजेक्ट करना चाहता हूं जिसे वह बना सकता है। व्युत्पन्न वर्ग को उन सूचनाओं को शुरू करने की परवाह नहीं करनी चाहिए, यह सिर्फ वहां होना चाहिए।आधार उदाहरण से व्युत्पन्न उदाहरण बनाने का कोई तरीका है?
वह अकेला विरासत के माध्यम से आसानी से संभव होगा। लेकिन समस्या यह है कि बेस क्लास अपने मूल्यों को नहीं जानता है। इसके बजाय, उन्हें पैरामीटर के रूप में पारित करने की आवश्यकता है। हालांकि, चूंकि व्युत्पन्न वर्ग को इसकी देखभाल करने की आवश्यकता नहीं है, इसलिए व्युत्पन्न कन्स्ट्रक्टर के माध्यम से पैरामीटर को सुरंग करना जो इसके साथ बेस कन्स्ट्रक्टर को कॉल करता है, कोई विकल्प नहीं है।
एकमात्र समाधान जो मैं सोच सकता हूं वह है कि जानकारी को स्थिर रूप से उपलब्ध कराया जाए ताकि बेस क्लास उन्हें सहायता के बिना प्राप्त कर सके। लेकिन मैं इससे बचना चाहता हूं।
क्या बेस क्लास बनाने और प्रारंभ करने का कोई तरीका है और बाद में व्युत्पन्न प्रकार के उदाहरण को विस्तारित करना है? यदि नहीं, तो सी ++ की उपलब्ध सुविधाओं का उपयोग करके मैं सृजन और निर्भरताओं के इस आदेश को कैसे प्राप्त कर सकता हूं?
#include <string>
#include <iostream>
using namespace std;
class Base {
public:
Base(string name, int age) : name(name), age(age) {}
protected:
const string name;
int age = 0;
};
class Derived : public Base {
Derived() { // No parameters here, no call to base constructor
cout << "My name is " << name << " and I'm " << age << "." << endl;
}
}
Base base("Peter", 42);
Derived derived(base); // "My name is Peter and I'm 42."
आपका "आधार निर्माता के लिए कोई कॉल नहीं" मुझे जवाब देता है: नहीं। ऐसा नहीं है कि सी ++ कैसे काम करता है। – Quentin
टीएल; डीआर; [प्रोटोटाइप पैटर्न] (http://sourcemaking.com/design_patterns/prototype) आपके उपयोग के मामले में मदद कर सकता है। –