重载对<<<<<<<

时间:2015-04-15 08:41:45

标签: c++ linked-list operator-overloading

我有这个代码,我无法计算重载<<操作者:

 ostream& operator<<(ostream& out)
     {int check=0;  
    node *temp;     
    temp=this->head->next;
    if(this->head->info==0)
        out<<"- ";  
    while(temp!=NULL)
        {   if(temp->info)
            {out<<temp->info<<" ";
            check=1;
        temp=temp->next;}
            else    if(temp->info==0&&check==1)
            {out<<temp->info<<" ";
                temp=temp->next;}
            else temp=temp->next;
        }
        return out;

    }

我在课堂上有一个结构,希望输出一个大数字。使用链表创建大号。重载方法在类中,我得到错误:运算符不匹配&lt;&lt;当我使用

 cout<< B;

在主内部。

有关上述代码的更多详细信息。 check变量是为了确保打印100这样的数字为100.如果head-&gt; info == 0 number为负数,如果它为1,则数字为正数。我从头开始 - >接下来因为第一个节点有数字符号。

3 个答案:

答案 0 :(得分:2)

你是以错误的方式做的...在类中重载操作符允许你使用类作为操作符的左操作数...所以基本上你现在可以做B << cout;

您需要将运算符重载为定义类的命名空间中的函数

ostream& operator<<(ostream& out, TYPE_OF_YOUR_CLASS_HERE v)
{
    int check=0;  
    node *temp;     
    temp=b.head->next;
    if(v.head->info==0)
        out<<"- ";  
    while(temp!=NULL)
    {   
        if(v.info) {
            out<<v.info<<" ";
            check=1;
            temp=temp->next;
        } else if(temp->info==0&&check==1) {
            out<<temp->info<<" ";
            temp=temp->next;
        }
        else 
            temp=temp->next;
    }
    return out;
}

正如Alper建议您还需要使运算符&lt;&lt;你班上的朋友能够访问班级的私人领域:

class MY_CLASS {
    ...
    friend ostream& operator<< (ostream& out, MY_CLASS v);
};

答案 1 :(得分:2)

如果要允许类型恰好位于二元运算符右侧的表达式,则首选全局operator<<重载。

std::ostream& operator<<(std::ostream& os, const YourClassType& B)

此外,如果需要访问私有成员,请将其设为friend。否则只需将其作为非朋友非会员功能。

答案 2 :(得分:1)

如果你想要标准语法,

operator<<重载不能是成员函数 - 你必须将它称为B << cout,这远非不错。
(对于所有二元运算符,B.operator<<(cout)表示B是左侧。)

这是我通常做的事情。

一个命名的常规成员函数:

ostream& output(ostream& out) const
{
    // Your code here.
}

和一个只调用它的运算符:

ostream& operator<<(ostream& os, const MyClass& c) 
{ 
    return c.output(os); 
}