Read/Write Class Objects from/to File in C++
Given a file “Input.txt” in which every line has values same as instance variables of a class.
Read the values into the class’s object and do necessary operations.
Theory :
The data transfer is usually done using '>>' and <<' operators. But if you have a class with 4 data members and want to write all 4 data members from its object directly to a file or vice-versa, we can do that using following syntax : To write object's data members in a file : // Here file_obj is an object of ofstream file_obj.write((char *) & class_obj, sizeof(class_obj)); To read file's data members into an object : // Here file_obj is an object of ifstream file_obj.read((char *) & class_obj, sizeof(class_obj));
Examples:
Input : Input.txt : Michael 19 1806 Kemp 24 2114 Terry 21 2400 Operation : Print the name of the highest rated programmer. Output : Terry
C++
// C++ program to demonstrate read/write of class // objects in C++. #include <iostream> #include <fstream> using namespace std; // Class to define the properties class Contestant { public : // Instance variables string Name; int Age, Ratings; // Function declaration of input() to input info int input(); // Function declaration of output_highest_rated() to // extract info from file Data Base int output_highest_rated(); }; // Function definition of input() to input info int Contestant::input() { // Object to write in file ofstream file_obj; // Opening file in append mode file_obj.open( "Input.txt" , ios::app); // Object of class contestant to input data in file Contestant obj; // Feeding appropriate data in variables string str = "Michael" ; int age = 18, ratings = 2500; // Assigning data into object obj.Name = str; obj.Age = age; obj.Ratings = ratings; // Writing the object's data in file file_obj.write(( char *)&obj, sizeof (obj)); // Feeding appropriate data in variables str = "Terry" ; age = 21; ratings = 3200; // Assigning data into object obj.Name = str; obj.Age = age; obj.Ratings = ratings; // Writing the object's data in file file_obj.write(( char *)&obj, sizeof (obj)); //close the file //It's always a good practice to close the file after opening them file_obj.close(); return 0; } // Function definition of output_highest_rated() to // extract info from file Data Base int Contestant::output_highest_rated() { // Object to read from file ifstream file_obj; // Opening file in input mode file_obj.open( "Input.txt" , ios::in); // Object of class contestant to input data in file Contestant obj; // Reading from file into object "obj" file_obj.read(( char *)&obj, sizeof (obj)); // max to store maximum ratings int max = 0; // Highest_rated stores the name of highest rated contestant string Highest_rated; // Checking till we have the feed while (!file_obj.eof()) { // Assigning max ratings if (obj.Ratings > max) { max = obj.Ratings; Highest_rated = obj.Name; } // Checking further file_obj.read(( char *)&obj, sizeof (obj)); } // close the file. //It's always a good practice to close the file after opening them file_obj.close(); // Output is the highest rated contestant cout << Highest_rated; return 0; } // Driver code int main() { // Creating object of the class Contestant object; // Inputting the data object.input(); // Extracting the max rated contestant object.output_highest_rated(); return 0; } |
Output:
Terry
This article is contributed by Rohit Thapliyal. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Please Login to comment...