我怎样才能使用cout<<我的课

时间:2010-06-05 19:53:03

标签: c++ class input integer

myclass是我写的C ++课程,当我写作时:

myclass x;
cout << x;

如何输出1020.2,如integerfloat值?

5 个答案:

答案 0 :(得分:75)

通常会为您的班级重载operator<<

struct myclass { 
    int i;
};

std::ostream &operator<<(std::ostream &os, myclass const &m) { 
    return os << m.i;
}

int main() { 
    myclass x(10);

    std::cout << x;
    return 0;
}

答案 1 :(得分:18)

您需要重载<<运算符

std::ostream& operator<<(std::ostream& os, const myclass& obj)
{
      os << obj.somevalue;
      return os;
}

然后,当您执行cout << xx类型为myclass时),它会输出您在方法中告诉它的任何内容。在上面的示例中,它将是x.somevalue成员。

如果无法将成员的类型直接添加到ostream,那么您还需要使用与上面相同的方法重载该类型的<<运算符。

答案 2 :(得分:8)

这很容易,只需实施:

std::ostream & operator<<(std::ostream & os, const myclass & foo)
{
   os << foo.var;
   return os;
}

你需要返回对os的引用才能链接outpout(cout&lt;&lt; foo&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; endl)

答案 3 :(得分:2)

即使其他答案提供了正确的代码,也建议使用隐藏的朋友函数来实现operator<<。隐藏友元函数的范围更有限,因此编译速度更快。由于混乱命名空间范围的重载更少,编译器需要做的查找更少。

struct myclass { 
    int i;

    friend auto operator<<(std::ostream& os, myclass const& m) -> std::ostream& { 
        return os << m.i;
    }
};

int main() { 
    auto const x = myclass{10};
    std::cout << x;

    return 0;
}

答案 4 :(得分:0)

替代:

struct myclass { 
    int i;
    inline operator int() const 
    {
        return i; 
    }
};