2

私はc++プログラム(I / Oストリームを処理する)で最初の大きな「クラス」をプログラミングしており、オブジェクト、メソッド、および属性の概念を理解したと思います。私はまだカプセル化の概念のすべての権利を取得していないと思いますが、Fileというクラスに持ってもらいたいので

  • 名前(ファイルのパス)、
  • 読書ストリーム、および
  • ライティングストリーム

属性として、

また、Fileオブジェクトの「書き込みストリーム」属性を実際に取得する最初のメソッド...

#include <string>
#include <fstream>

class File {
public:
    File(const char path[]) : m_filePath(path) {}; // Constructor
    File(std::string path) : m_filePath(path) {}; // Constructor overloaded
    ~File(); // Destructor
    static std::ofstream getOfstream(){ // will get the private parameter std::ofStream of the object File
        return m_fileOStream;
    };
private:
    std::string m_filePath; // const char *m_filePath[]
    std::ofstream m_fileOStream;
    std::ifstream m_fileIStream;
};

しかし、エラーが発生します:

エラー4エラーC2248:'std :: basic_ios <_Elem、_Traits> :: basic_ios':クラスで宣言されたプライベートメンバーにアクセスできません' std :: basic_ios <_Elem、_Traits>'c:\ program files(x86)\ microsoft visual studio 10.0 \ vc \ include \ fstream 1116

fstream.ccの次の部分に私を報告します:

private:
    _Myfb _Filebuffer;  // the file buffer
    };

次に、これを修正して、クラスのパラメーターとしてストリームを使用できるようにしてください。ストリーム自体の代わりに参照を返そうとしましたが、それについてもいくつかの助けが必要になります(どちらも機能しません...)。前もって感謝します

4

2 に答える 2

4

変化する

static std::ofstream getOfstream(){ // will get the private parameter std::ofStream of the object File
        return m_fileOStream;
    };

// remove static and make instance method returning a reference
// to avoid the copy constructor call of std::ofstream
std::ostream& getOfstream(){ return m_fileOStream; }
于 2012-07-24T18:21:15.380 に答える
1

各クラスには3つのセクションがあるため、次のクラスを想定します。

class Example{

public:
   void setTime(int time);
   int getTime() const;
private:
 int time;
protected:
bool ourAttrib;

}

パブリック、プライベート、保護された単語が表示されます、はい、カプセル化について説明しています、メソッドまたは属性にプライベートを使用できる場合は、メンバーだけが使用できますが、パブリックを使用する場合は、誰もが使用できます。このクラス、派生クラスは、保護されたものと継承されたものを使用できます。

于 2012-07-24T19:43:02.503 に答える