【问题标题】:How to override the ++ operator in C++ and then print the output using an overriden << operator?如何覆盖 C++ 中的 ++ 运算符,然后使用覆盖的 << 运算符打印输出?
【发布时间】:2010-12-26 02:24:04
【问题描述】:

我正在尝试学习 C++ 中的重写运算符。但我坚持这一点:

..\src\application.cpp:在函数“int main()”中:

..\src\application.cpp:29: 错误:在 'std::operator& )(&std::cout)), ((const char*)"Poly A:")) Poly::operator++(0)'

这是导致错误的行,似乎我的后增量运算符没有返回任何可打印的内容:

cout << "Poly A: " << A++ << endl;

我有一个 Poly.h 和一个 Poly.cpp 文件:

class Poly{
friend istream& operator>>(istream &in, Poly &robject);
friend ostream& operator<<(ostream &out, Poly &robject);
public:
    Poly();

    Poly operator++(int);
    Poly operator++();      
private:
    int data[2];
};

Poly.cpp:

Poly Poly::operator++ (){
data[0]+=1;
data[1]+=1;
return *this;}

Poly  Poly::operator++ (int){
    Poly  result(data[0], data[1]);
        ++(*this);  
    return result;
}
ostream& operator<<(ostream &out, Poly &robject){ 
out << "(" << robject.data[0] << ", " << robject.data[1] << ")";
return out;
}

【问题讨论】:

    标签: c++ overriding


    【解决方案1】:

    我认为问题在于您将参数声明为引用:

    ostream& operator<<(ostream &out, Poly &robject)
    

    引用不会绑定到您从operator++ 返回的临时对象。 如果您将Poly 参数设为const 引用,您应该能够输出它。

    【讨论】:

    • 是的,这是正确的。您需要在 operator
    • 除其他外。如果一个人既想绑定到临时文件又想修改它,这将是一个问题,但在这种情况下这不是问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多