C++类构造函数和istream运算符>>

标签 c++ class constructor operator-keyword istream

  1. 当使用带有许多变量的构造函数时。我首先对其进行了初始化,然后将其放入构造函数。采用这种方式,数据只能通过文件或控制台单独输入。

  2. 但是当使用 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/

相关文章:

c++ - 创建指针时没有调用构造函数吗?

c++ - 'this' 用于结构?

c++ - 使用 const 值数组初始化基类

c++ - 语义略有不同的复制构造函数和赋值运算符中是否存在陷阱?

python - 将方法动态附加到使用 swig 生成的现有 Python 对象?

c++ - 设计线程类

ruby - 描述ruby中的类关系

python - 使用类制作 Tkinter Gui

c++ - 如何有效地处理 C++ 容器对象?

c++ - 如何使用带有非默认构造函数的指针进行 Boost 序列化