当使用带有许多变量的构造函数时。我首先对其进行了初始化,然后将其放入构造函数。采用这种方式,数据只能通过文件或控制台单独输入。
但是当使用 istream 运算符时>>。我使用默认构造函数,然后将其放入 istream operator>> 方法。但是我发现这种方式似乎没有必要使用除默认构造函数之外的其他构造函数,但是属性可以通过文件或控制台输入。 例如:
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; }
我的问题是应该推荐使用第一种还是第二种方法?
最佳答案
编写安全且方便您使用的代码。
Fraction
类很简单并且具有广泛的潜在用途,因此它同时具有构造函数和序列化运算符是合理的。作为一般规则,简单和通用类是最好的。
对于包含许多属性或具有复杂验证规则的结构化数据的类,拥有一个具有许多参数的构造函数(或许多构造函数重载具有令人困惑的替代参数选择)可能会很不方便,因此您可以跳过它而不用.但这将是程序设计的危险信号,是“上帝类”问题的征兆。
关于C++类构造函数和istream运算符>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40057804/