重载不适用于 <<

Overloading doesn't work for <<

我有这段代码,但我无法想象如何重载 << 运算符:

 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;

    }

我在 class 中有一个结构,希望输出一个大数字。大数是用链表创建的。重载方法在 class 内,我得到错误:当我使用

时,运算符 << 不匹配
 cout<< B;

在主内。

有关上述代码的更多详细信息。检查变量是为了确保像 00100 这样的数字被打印为 100。如果 head->info ==0 数字为负数,如果为 1,则数字为正数。我从 head->next 开始,因为第一个节点有数字符号。

你做错了...... class 中的重载运算符允许你使用 class 作为运算符的左操作数......所以基本上你可以现在正在做 B << cout;

您需要在定义了 class 的命名空间中将运算符作为函数重载 ,如下所示:

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 所建议的,您还需要让操作员<<成为您 class 的朋友,以便能够访问 class:

的私有字段
class MY_CLASS {
    ...
    friend ostream& operator<< (ostream& out, MY_CLASS v);
};

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

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

此外,如果需要访问私有成员,则设为friend。否则简单地使它成为非友元非成员函数。

如果您想要标准语法,

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); 
}