मेरे पास एक कक्षा है जिसमें कोई डिफ़ॉल्ट कन्स्ट्रक्टर या असाइनमेंट ऑपरेटर नहीं है, इसलिए इसे किसी अन्य फ़ंक्शन के परिणाम के आधार पर एक if/else कथन के भीतर घोषित और प्रारंभ किया जाता है। लेकिन फिर यह कहता है कि यह बाद में दायरे से बाहर है, भले ही सशर्त के दोनों मार्ग एक उदाहरण बनायेंगे।बयानों में चर के दायरे
निम्नलिखित उदाहरण पर विचार (int
के साथ किया बस बिंदु को वर्णन):
#include <iostream>
int main()
{
if(1) {
int i = 5;
} else {
int i = 0;
}
std::cout << i << std::endl;
return 0;
}
चर सशर्त के अंत में क्षेत्र से बाहर एक सशर्त ही बार में घोषित करते हैं? ऐसी परिस्थिति को संभालने का सही तरीका क्या है जहां कोई डिफ़ॉल्ट कन्स्ट्रक्टर नहीं है लेकिन कन्स्ट्रक्टर के लिए तर्क कुछ सशर्त पर निर्भर करते हैं?
संपादित
दिए गए उत्तर के प्रकाश में, स्थिति इतनी शायद दृष्टिकोण परिवर्तन होगा और अधिक जटिल है। एक सार आधार वर्ग ए और दो वर्गों बी और सी कि ए से निकाले जाते हैं नहीं है कैसे होगा कुछ इस तरह:
if(condition) {
B obj(args);
} else {
C obj(args);
}
परिवर्तन दृष्टिकोण? चूंकि ए सार है, मैं केवल A* obj
घोषित नहीं कर सका और उचित प्रकार new
के साथ बना सकता हूं।
क्या आपकी विरासत आभासी या स्थैतिक है? – Dani
आभासी, मुझे लगता है। 'क्लास ए' में वर्चुअल फ़ंक्शन है, यदि आपका यही मतलब है (सी ++ मेरा मजबूत सूट नहीं है, तो मैं ज्यादातर फोरट्रान में काम करता हूं) – tpg2114
आप वास्तव में एक अमूर्त वर्ग में पॉइंटर घोषित कर सकते हैं - मैंने अपना जवाब संपादित किया। –