-3

我对 cin 和 cout object 的声明有疑问。根据我的理解 cin 和 cout 两个对象都可以在 main 中访问,那么它们不应该被保护。在下面的代码片段中,我已经重载了输入和输出运算符,同时给这个运算符的用户定义版本提供了新名称(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;
}
4

1 回答 1

0

相关部分是 & in ostream &。这使它成为一个参考。

在您的main()中,您实际上可以执行相同的操作:ostream& obj = std::cout;. 就像ostream& outputinoperator<<在该函数运行时有效一样,ostream& obj将在该main函数运行时有效。

[编辑] 至于您的评论,这缺少一个关键点。std::cout是一个std::ostream,是的。但是std::ofstream(file) 也是一个std::ostream. 等等,你可能会说,一种类型是另一种类型?是的,在 OO 语言中。继承意味着每个对象都有用于构造它的类型,但也有任何继承自的基类型。

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

于 2013-10-22T12:50:51.363 回答