多くの変数を持つコンストラクタを使用する場合。私は最初にそれを初期化し、それをコンストラクタに配置しました。この方法では、データはファイルまたはコンソールによってのみ入力することができます。C++クラスコンストラクタとistream演算子>>
しかし、istream演算子を使用する場合>>。私はデフォルトコンストラクタを使用し、それをistream演算子>>メソッドに入れました。しかし、私はそれがデフォルトのコンストラクタを除いて、他のコンストラクタを使用する必要はありませんが、このように見えるが、属性はファイルまたはコンソールで入力することができます。たとえば :
class Fraction { private: int numerator; int denominator; public: Fraction(int num,int den); Fraction(); friend istream& operator>>(istream& is,Fraction &frac); }; void main() { int num,int den; cin>>num>>den; Fraction fra(num,den); } istream& operator>>(istream& is,Fraction &frac) { is>>frac.numerator>>frac.denominator; return is; } void main() { Fraction f; ifstream inputFile("data.txt"); if(inputFile.file()) { cout<<"File cannot be opened!"<<endl; } inputFile>>f; inputFile.close(); //with input from console cin>>f; }
私の質問は、アプローチ最初の1または第二のいずれかを使用し、推奨されなければならないのですか?
まず、あなたのコードはうまくいかないはずです。メンバ 'operator >>は、1つのパラメータしか持たない。たとえそれを正しくしようとしても奇妙に見えます: 'object >> stream'。友人のオペレータ>>を作って使ってください。 'istream&'コンストラクタを提供するのはちょっと残酷になりますが、実際は自然ではありません。 – Incomputable
Trueです。私はオペレーター>> –