none
重载 << 运算符 RRS feed

  • 问题

  • 请问:我用友元的形式重载 << 时

    friend ostream & operator << (ostream &,  const CArray &);//CArray是我定义的一个类

    为什么在 operator 前要加 & 

     

    2011年6月30日 5:04

答案

  • 因为不返回引用,而返回对象,会调用iostream的拷贝构造函数。iostream由于上面我说的原因不让你调拷贝构造函数。所以做成了private的。
    麻烦把正确答案设为解答。
    2011年6月30日 7:51
    版主

全部回复

  • 那个是返回ostream类型的引用


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年6月30日 5:19
    版主
  • 因为可以支持

    os<<CA1<<CA2<<CA3<<endl;

    的形式。如果返回是一个全新的对象则无法支持这种形式。

     


    麻烦把正确答案设为解答。
    2011年6月30日 6:25
    版主
  • 但是我把 & 去掉之后,编译器会出现:不能访问私有成员 的错误
    2011年6月30日 7:16
  • 如果我把 & 去掉之后,会有一下错误

    error C2248: “std::basic_ios<_Elem,_Traits>::basic_ios”: 无法访问 private 成员(在“std::basic_ios<_Elem,_Traits>”类中声明)

    为什么??

    2011年6月30日 7:19
  • 因为不返回引用,而返回对象,会调用iostream的拷贝构造函数。iostream由于上面我说的原因不让你调拷贝构造函数。所以做成了private的。
    麻烦把正确答案设为解答。
    2011年6月30日 7:51
    版主
  • 谢谢你的回答!

    请问能不能将上面的原因讲的在详细一些(我只是个初学者>_<)

    2011年6月30日 13:22