私はC++を学んでいますが、私はオブジェクト指向の章に到達しました。 if文の中にオブジェクトを作成する方法について質問があります。条件付きのC++文でオブジェクトを作成
私が取り組んでいる問題は、レポートヘッダーを表示するクラスを作成するということです。このクラスには、会社名とレポート名を一般的なものに設定するデフォルトのコンストラクタがあり、ユーザーが望む場合は、2つの引数(文字列会社名とレポート名)を取るコンストラクタもあります。
問題は、「2つのパラメータのデフォルトのコンストラクタは、新しいReportオブジェクトが作成されるときにこれらの[会社名とレポート名]を指定できるようにする必要があります。ユーザーが引数を渡さずにReportオブジェクトを作成するとデフォルト値を使用します。それ以外の場合は、ユーザー指定の値を使用します。
私の質問は、これらのオブジェクトを作成する方法です。引数なしでオブジェクトを作成する方法を理解しています(newobj; Report)、また引数(Report newobj(string string);)も使用しています。基本的に、私はこれらのオブジェクトを最初に私の主な機能の先頭に作成する方法を得ます。しかし、ユーザの選択に基づいてif文をif文の中に作成することは可能ですか?ここで私はこれまで持っているものであると、明らかに、それは動作しません:
#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;
}
だから私はそれは選択だ場合は何も指定されていない場合、デフォルト値を使用してオブジェクトを作成したり、ユーザーの値を持つものを作成したいです与えられた。私はC++でインタラクティブに行う方法を理解できません。私は今までのところどこにも同様の質問を見つけることができませんでした。
私が遭遇した最も近いことは、私がやりたいことに似た何かをするためにポインタを使用していますが、私が使っている本はまだポインタに達していません。それは私が働いている章の範囲内にとどまります(つまり、ポインタを使わない)。
ヘッダーファイルやクラスの実装ファイルは、ここでは関係ないと思うので、私は含めませんでした。
ありがとうございます!
これは、ポインタを使用できないときには本当に興味深い質問です!私はデフォルトの 'レポート'を作成せずにそれを後で上書きすることなく(愚かなように)きれいに行うことはできないかもしれないと思います。 –
あなたはスコープの問題に遭遇しています - ここで似たような質問があり、誰かがポインタを使って答えます:http://stackoverflow.com/questions/1793807/declaring-a-variable-in-an-if-else-block-in -c - あなたのために、 'if'ステートメントの外側に' Report'オブジェクトを作成することができます。これはオブジェクトのデフォルトのコンストラクタを呼び出し、 'name'を取得した場合、別の'レポート'。もちろん、デフォルトのコンストラクタがない場合、このソリューションはうまくいかず、コンパイラはあなたに叫ぶでしょう。 – birryree
@orangeoctopus:それは**可能であり、実際にはほんのわずかです。 –