Écrire un object de classe dans un fichier en utilisant fstream puis le lire

Je veux faire une classe d’un étudiant et prendre 3 informations d’entrée et faire une sortie de ce fichier. Comment ça? C’est mon essai:

#include  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; } 

C ++ utilise le paradigme de stream pour implémenter une entrée / sortie standard.

Le paradigme de stream signifie que si votre application souhaite accéder à / utiliser une ressource (un fichier, la console, etc.), un stream joue le rôle de médiateur entre votre application et la ressource:

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

Cela signifie que chaque opération d’écriture / lecture que vous effectuez est en réalité une opération de stream. Le but de ceci est que les opérations de stream sont fondamentalement les mêmes, quel que soit le type de ressource (et quel type de stream) utilisez-vous.

Cela nous permet de mettre en œuvre un “générique” (signification générique valable pour tout type de stream / ressource). Comment? Surcharge des opérateurs C ++ >> et << .

Pour les opérations d’entrée (entrée signifie recevoir les données du stream et les mettre dans notre variable / object), nous devons surcharger l’opérateur >> comme suit:

 istream& operator>>(istream& is , MyClass& object) { is >> object.myClassAsortingbutte; (1) ... //Same for every atsortingbute of your class. return is; } 

Tout d’abord, notez que le stream d’entrée est passé par référence. Par référence, car les stream ne sont pas copiables (Que signifie exactement copier un stream? Copiez le lien entre votre application et la ressource? Cela semble ridicule), et non-constant, car vous allez modifier le stream (Vous allez écrire à travers).

Enfin, notez que la fonction ne retourne pas void, renvoie une référence au même stream qui a été transmis à la fonction. Cela vous permet d’écrire des phrases concaténées-écriture / lecture comme cout << "Hello. " << "Im" << " Manu343726" << endl;

Pour les opérations de sortie (Sortie signifie l'envoi de données au stream), nous devons surcharger l'opérateur <<, dont l'implémentation est exactement la même:

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

Notez que dans ce cas, votre object est passé const, car nous ne le modifierons pas (nous ne lirons que ses atsortingbuts).

(1) Est préférable d'implémenter ces fonctions en les rendant amis de votre classe, pour nous permettre d'accéder aux membres privés / protégés.

Vous devez surcharger les opérateurs << et >> pour ostream et istream

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

rendez-les amis et mettez-les en œuvre