2017-05-26 46 views
0

在一个使用它的类重载operator<<()功能,它会在main()函数中使用像ostream和reference如何自动创建?

int main() 
{ 
    MyOwnClass myClass; 
    cout << myClass; 

} 

是如何的< <运营商能够创建ostream的&参考 并且我们可以做到这一点像

operator<<(myClass); 

,因为它是一个友元函数

+1

'cout << myClass;'仅仅和函数调用'operator <<(cout,myClass)'一样。你有什么特别的问题吗? –

+0

我在想''cout.operator <<(myClass)'''谢谢帮我明确我的想法 – arc

+0

@πάνταῥεῖ理论上,它也可以是一个函数调用'cout.operator <<(myClass)'(尽管当然不是'cout')。 – Walter

回答

1

必须重载输出流运算符std::ostream& << myclass。二进制运算符(如<<)可以作为其第一个操作数类型的成员(并将第二个操作数作为唯一参数)或作为以两个操作数为参数的独立函数实现。

在这里,只有第二个选项是可能的,因为您不能更改std::ostream的定义。例如

struct myclass // just an example 
{ 
    int data; 
}; 

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

函数体内部,这个调用operator<<(std::ostream&, int),这是在iostream定义并返回参照其上输入端接收的相同ostream。如果是更复杂的课程,则可以返回流。

std::ostream& operator<<(std::ostream&os, myclass const&obj) 
{ 
    for(auto x:obj.table) 
    os << std::setprecision(12) << x 
    return os; 
}