मैं सी ++ सीख रहा हूं, और मुझे ऑब्जेक्ट उन्मुख अध्याय मिला है। बयान के अंदर वस्तुओं को बनाने के बारे में मेरे पास एक सवाल है।सशर्त सी ++ कथन में ऑब्जेक्ट बनाएं
जिस समस्या पर मैं काम कर रहा हूं वह एक वर्ग बनाने के लिए कहता है जो रिपोर्ट हेडर प्रदर्शित करेगा। कक्षा में एक डिफ़ॉल्ट कन्स्ट्रक्टर है जो कंपनी के नाम और रिपोर्ट नाम को सामान्य चीज़ पर सेट करता है, और यदि उपयोगकर्ता चाहता है, तो एक कन्स्ट्रक्टर है जो दो तर्क (स्ट्रिंग कंपनी का नाम और रिपोर्ट नाम) लेता है।
समस्या कहती है, विशेष रूप से, "एक दो पैरामीटर डिफ़ॉल्ट कन्स्ट्रक्टर को इन [कंपनी और रिपोर्ट नामों] को एक नई रिपोर्ट ऑब्जेक्ट बनाने के समय निर्दिष्ट करने की अनुमति देनी चाहिए। यदि उपयोगकर्ता किसी भी तर्क को पार किए बिना रिपोर्ट ऑब्जेक्ट बनाता है , डिफ़ॉल्ट मानों का उपयोग करें। अन्यथा, नामों के लिए उपयोगकर्ता निर्दिष्ट मानों का उपयोग करें। "
तो मेरा सवाल यह है कि इन वस्तुओं को कैसे बनाया जाए? मैं समझता हूं कि बिना किसी तर्क के किसी ऑब्जेक्ट को कैसे बनाया जाए (यानी newobj की रिपोर्ट करें;), और तर्क के साथ (यानी newobj (स्ट्रिंग स्ट्रिंग) की रिपोर्ट करें;)। असल में, मुझे लगता है कि शुरुआत में मेरे मुख्य कार्य के शीर्ष पर इन वस्तुओं को कैसे बनाया जाए। लेकिन उपयोगकर्ता विकल्पों के आधार पर बयान के अंदर उन्हें बनाना संभव है? यहाँ मैं अब तक स्पष्ट रूप से है और, है, यह काम नहीं करता:
#include <iostream>
#include <string>
#include "report.h"
using namespace std;
bool enter_company_name(); // return true if user wants to enter company name
bool print_form(); // return true if user wants to print in formatted output
int main()
{
string company_name,
report_name;
bool name = false,
format = false;
name = enter_company_name();
format = print_form();
if (name)
{
cout << "Enter company name: ";
getline(cin, company_name);
cout << "Enter report name: ";
getline(cin, report_name);
Report header(company_name, report_name); // THIS IS MY PROBLEM
}
else
Report header; // THIS IS MY PROBLEM
if (format)
header.print_formatted();
else
header.print_one_line();
return 0;
}
bool enter_company_name()
{
char choice;
cout << "Do you want to enter a name?\n>";
cin >> choice;
if (choice == 'y' || choice == 'Y')
return true;
else
return false;
}
bool print_form()
{
char choice;
cout << "Do you want to print a formatted header?\n>";
cin >> choice;
if (choice == 'y' || choice == 'Y')
return true;
else
return false;
}
तो मैं डिफ़ॉल्ट मान का उपयोग कर एक वस्तु बनाने यदि कुछ भी निर्दिष्ट कर रहे हैं, या उपयोगकर्ता मूल्यों के साथ एक बनाना चाहते हैं कि अगर पसंद है दिया हुआ। मैं बस यह नहीं समझ सकता कि इसे सी ++ में इंटरैक्टिव तरीके से कैसे किया जाए। मैं अब तक कहीं भी इसी तरह के कोई प्रश्न नहीं ढूंढ पाया है।
मैं जो नज़दीकी चीज में आया हूं, वह कुछ करने के लिए पॉइंटर्स का उपयोग करता है जो मैं करना चाहता हूं, लेकिन जिस पुस्तक का मैं उपयोग कर रहा हूं वह अभी तक पॉइंटर्स तक नहीं मिला है, और मैं एक तरीका जानने का प्रयास करना चाहता हूं ऐसा करें जो अध्याय की सीमाओं के भीतर रहता है जिसमें मैं काम कर रहा हूं (यानी पॉइंटर्स का उपयोग नहीं कर रहा हूं)।
मैंने हेडर फ़ाइल या कक्षा कार्यान्वयन फ़ाइल शामिल नहीं की क्योंकि मुझे नहीं लगता कि वे यहां प्रासंगिक हैं।
अग्रिम धन्यवाद!
यह वास्तव में एक दिलचस्प सवाल है जब आप पॉइंटर्स का उपयोग नहीं कर सकते! मुझे लगता है कि डिफॉल्ट 'रिपोर्ट' बनाने के बिना साफ-सफाई करना संभव नहीं होगा और फिर इसे बाद में ओवरराइट करना (जो मूर्खतापूर्ण लगता है)। –
आप स्कोपिंग मुद्दों में भाग रहे हैं - यहां एक समान प्रश्न है, जहां कोई सूचक का उपयोग करने का उत्तर देता है: http://stackoverflow.com/questions/1793807/declaring-a-variable-in-an-if-else-block-in -सी - आपके लिए, आप 'if' कथन के बाहर 'रिपोर्ट' ऑब्जेक्ट बना सकते हैं, जो ऑब्जेक्ट के लिए डिफ़ॉल्ट कन्स्ट्रक्टर का आह्वान करेगा, और यदि आपको 'नाम' मिलता है, तो आप इसे किसी अन्य रिपोर्ट पर पुनः सौंप सकते हैं '। बेशक, यदि आपके पास डिफॉल्ट कन्स्ट्रक्टर नहीं है, तो यह समाधान काम नहीं करेगा और संकलक आपको चिल्लाएगा। – birryree
@orangeoctopus: यह ** ** संभव है और वास्तव में काफी तुच्छ है। –