-1

私は学生のクラスを作り、3つの入力情報を取り、このファイルの出力を作成したいと考えています。どうやってこれに?これは私の試みです:

#include <iostream>
using namespace std;
class Student{
  private:
    char name[50];
    char id[50];
    int age;
  public:
    void getdata()
    {
        //take name as input
        //take id as input
        //take age as input
    }
    void showdata()
    {
         //display stored file
    }
 }

int main()
{
    Student s1;
    ofstream s1("student.txt");      //i want to store that 's1' object
    //anything else
    return 0;
}
4

2 に答える 2

4

C++ は、ストリーム パラダイムを使用して標準入出力を実装します。

ストリーム パラダイムとは、アプリケーションがリソース (ファイル、コンソールなど) にアクセス/使用したい場合、ストリームがアプリケーションとリソースの間のメディエーターとして機能することを意味します。

                     ofstream       +----+
              +-------------------->|File|
              |                     +----+
              |
       +------+------+
       | Application |
       +------+------+
              |
              |                     +-------+
              +-------------------->|Console|
                        cout        +-------+

これは、実行するすべての書き込み/読み取り操作が実際にはストリーム操作であることを意味します。これのポイントは、使用しているリソースのタイプ (およびストリームのタイプ) に関係なく、ストリーム操作は基本的に同じであるということです。

これにより、「ジェネリック」を実装できます (ジェネリックとは、あらゆるタイプのストリーム/リソースに有効な意味です)。どのように?C++ 演算子 >> および << のオーバーロード

入力操作 (入力とは、ストリームからデータを受け取り、それを変数/オブジェクトに入れることを意味します) の場合、次のように >> 演算子をオーバーロードする必要があります。

istream& operator>>(istream& is , MyClass& object)
{
    is >> object.myClassAtributte; (1)
    ... //Same for every attribute of your class.

    return is;
}

まず、入力ストリームが参照によって渡されることに注意してください。ストリームはコピー不可であるため (ストリームをコピーするとは正確にはどういう意味ですか? アプリとリソースの間のリンクをコピーしますか? それはばかげているように聞こえます)、ストリームを変更しようとしているため、const ではありません (次のように記述します)。それを通して)。

最後に、関数は void を返さず、関数に渡されたのと同じストリームへの参照を返すことに注意してください。これにより、次のような連結された書き込み/読み取り文を書くことができますcout << "Hello. " << "Im" << " Manu343726" << endl;

出力操作 (出力はデータをストリームに送信することを意味します) の場合、 << 演算子をオーバーロードする必要がありますが、その実装はまったく同じです。

ostream& operator<<(ostream& os , const MyClass& object)
{
    os << object.myClassAtributte; (1)
    ... //Same for every attribute of your class.

    return os;
}

この場合、オブジェクトは const に渡されることに注意してください。これは、オブジェクトを変更しないためです (属性のみを読み取ります)。

(1)この関数を実装して、クラスの友達にして、プライベート/保護されたメンバーにアクセスできるようにすることをお勧めします。

于 2013-06-08T16:21:49.917 に答える
0

<<and のand>>演算子をオーバーロードする必要がostreamありますistream

std::ostream& operator<< (std::ostream& stream, const Student& student)
std::istream& operator<< (std::istream& stream, Student& student)

彼らを友達にして実装する

于 2013-06-08T15:36:32.013 に答える