デフォルトのコンストラクターや代入演算子を持たないクラスがあるため、別の関数の結果に応じてif/elseステートメント内で宣言され、初期化されます。しかし、それは条件の両方のルートがインスタンスを作成するにもかかわらず、後で範囲外であると言います。ifステートメントの変数の範囲
は(ちょうどポイントを説明するためにint
で行われる)次の例を考えてみましょう:
#include <iostream>
int main()
{
if(1) {
int i = 5;
} else {
int i = 0;
}
std::cout << i << std::endl;
return 0;
}
は、条件付きの終わりに範囲外の条件、外出先で宣言された変数ですか?デフォルトのコンストラクタは存在しないが、コンストラクタの引数は特定の条件に依存する状況を処理する正しい方法は何ですか?
編集
与えられた回答の光で、事態はそうかもしれないアプローチが変化しなければならない、より複雑です。 Aから派生した抽象基本クラスAと2つのクラスBとCがあります。どのようにすればこのようになりますか:
if(condition) {
B obj(args);
} else {
C obj(args);
}
アプローチを変更しますか? Aは抽象型なので、A* obj
を宣言し、new
で適切な型を作成するだけではありません。
あなたの継承は仮想か静的ですか? – Dani
バーチャル、そう思う。 'class A'は仮想関数を持っています(C++は私の強い訴えではありませんが、私はFortranでよく働きます) – tpg2114
あなたは実際に抽象クラスへのポインタを宣言できます。 –