-3

私は cin と cout object の宣言に関して疑問を持っています。私の理解によると、cin と cout の両方のオブジェクトがメインでアクセス可能であり、保護されるべきではありません。以下のコード スニペットでは、入力演算子と出力演算子の両方をオーバーロードし、この演算子のユーザー定義バージョンに新しい名前 (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

関連する部分は の & ですostream &。ということで参考になります。

あなたのmain()では、実際に同じことができます: ostream& obj = std::cout;. ostream& outputその関数の実行中に inoperator<<が有効であるのと同じように、関数の実行ostream& obj中に有効になりますmain

[編集] あなたのコメントに関しては、重要な点が欠けています。はい、ですstd::coutstd::ostreamしかし、std::ofstream(ファイル) もstd::ostream. ちょっと待って、あるタイプは別のタイプだと言うかもしれませんか?はい、OO 言語で。継承とは、各オブジェクトがそれを構築するために使用される型だけでなく、継承元の基本型も持つことを意味します。

そのため、オーバーロードにファイル ストリームを渡すことができますoperator<<。はstd::ostream&、任意の派生オブジェクトで初期化できます。

于 2013-10-22T12:50:51.363 に答える