如何在istream&中调用两个参数构造函数运营商?

时间:2013-11-28 03:58:32

标签: c++

class base
{
    int a, b;
public:
    base(int a, int b);
    {
        a = a;
        b = b;    
    }
}

istream& operator>>(istream& is, base& no)
{
    int area, local;
    cout << "Area Code     : ";
    is >> area;
    cout << "Local number  : ";
    is >> local;
    // call two argument constructor;
    return is;
}

我已经尝试了base(area,local);但是在执行之后,值会变回0

我也试过no(area,local);这也行不通......

3 个答案:

答案 0 :(得分:1)

您所描述的不是构造函数;它是一个插入运算符(operator>>)。

对于您的班级base,您可以这样称呼它:

base b;
std::cin >> b;

您的运营商将实施为

istream& operator>>(istream& is, base& no)
{
    cout << "Area Code     : ";
    is >> no.area;
    cout << "Local number  : ";
    is >> no.local;
    // call two argument constructor;
    return is;
}

答案 1 :(得分:1)

你可以把它写成

no = base(area, local);

或者,如果您让operator>>成为base课程的朋友,那么您可以将单个读取修改为

is >> no.area;
is >> no.local;

答案 2 :(得分:0)

在构造函数中,您可以:

base(int a, int b);
{
    a = a;
    b = b;    
}

只将参数分配给自己,而不是参数的成员变量。要更改成员变量,您必须执行以下操作:

base(int a, int b)
{
    this->a = a;
    this->b = b;    
}

调用它的语法是no = base(area, local);。如果您的IDE无法为您生成,可以还需要一个分配运算符。它可能足够聪明,但只是给你一个抬头。