cin和cout重新声明

时间:2013-10-22 12:26:35

标签: c++ operator-overloading

我怀疑cin和cout对象的声明。根据我的理解cin和cout这两个对象都可以在main中访问,然后它们不应该有protected.in下面的代码片段我已经重载了输入和输出操作符和     在给用户定义的此运算符版本提供新名称(ofstream obj)时,我收到的错误就像obj受到保护而无法在此处访问。任何人都可以建议。

#include<iostream>
using namespace std;

class overload
{
public:
    int var_a;
    overload (int fun_a=10): var_a(fun_a)  {}
    friend ostream operator >> (ostream &output, overload &);
    friend istream operator << (istream &input, overload &);
};

ostream &operator <<( ostream &output, overload &s1)
{
    output<<"value of object output:"<<s1.var_a<<endl;
    return output;
}

istream &operator >>( istream &input, overload &s1)
{
    input >> s1.var_a;
    return input;
}

int main()
{
    overload s1,s2;
    //ostream obj;
    //obj<<"enter the value of object"
    cout<<"enter the value of object";
    cin>>s2;
    cout<<s2;

    return 1;
}

1 个答案:

答案 0 :(得分:0)

相关部分是&amp;在ostream &。这使它成为参考。

main()中,您实际上也可以这样做:ostream& obj = std::cout;。就像ostream& output中的operator<<在该函数运行时有效一样,ostream& objmain函数运行时有效。

[编辑] 至于你的评论,那是错过了一个关键点。 std::coutstd::ostream,是的。但std::ofstream(文件)也是std::ostream。等等,你可能会说,一种类型是另一种类型?是的,用OO语言。继承意味着每个对象都具有用于构造它的类型,但也包含从。继承的任何基类型。

这就是为什么你可以将文件流传递给operator<<重载的原因。可以使用任何派生对象初始化std::ostream&