我怀疑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;
}
答案 0 :(得分:0)
相关部分是&amp;在ostream &
。这使它成为参考。
在main()
中,您实际上也可以这样做:ostream& obj = std::cout;
。就像ostream& output
中的operator<<
在该函数运行时有效一样,ostream& obj
在main
函数运行时有效。
[编辑]
至于你的评论,那是错过了一个关键点。 std::cout
是std::ostream
,是的。但std::ofstream
(文件)也是std::ostream
。等等,你可能会说,一种类型是另一种类型?是的,用OO语言。继承意味着每个对象都具有用于构造它的类型,但也包含从。继承的任何基类型。
这就是为什么你可以将文件流传递给operator<<
重载的原因。可以使用任何派生对象初始化std::ostream&
。