Print Function for C ++ Class

I want to write a print function for an AutoData class that contains information about machines. With this print function, I would ideally want to print a vector that contains many different class objects. I already wrote functions for each element of objects, but I'm still a little unsure how to use these functions to write functions to print data in the following format:

mpg:cylinders:displacement:horsepower:weight:acceleration:modelYear:origin:carName 

For instance:

 10.0:8:360.0:215.0:4615.:14.0:70:1:ford f250 10.0:8:307.0:200.0:4376.:15.0:70:1:chevy c20 11.0:8:318.0:210.0:4382.:13.5:70:1:dodge d200 

Grade:

 #include <string> #include <vector> #include <iostream> using namespace std; class AutoData { public: AutoData() { mpg = 0; cylinders = 0; displacement = 0; horsepower = 0; weight = 0; acceleration = 0; modelYear = 0; origin = 0; carName = ""; } AutoData( const AutoData & rhs) { setAuto(rhs.mpg, rhs.cylinders, rhs.displacement, rhs.horsepower, rhs.weight, rhs.acceleration, rhs.modelYear, rhs.origin, rhs.carName); } void setAuto(float mp, int cy, float di, float ho, float we, float ac, int mo, int o, string ca) { mpg = mp; cylinders = cy; displacement = di; horsepower = ho; weight = we; acceleration = ac; modelYear = mo; origin = o; carName = ca; } const float & getmpg( ) const { return mpg; } const int & getcylinders( ) const { return cylinders; } const float & getdisplacement( ) const { return displacement; } const float & gethorsepower( ) const { return horsepower; } const float & getweight( ) const { return weight; } const float & getacceleration( ) const { return acceleration; } const int & getmodelYear( ) const { return modelYear; } const int & getorigin( ) const { return origin; } const string & getcarName( ) const { return carName; } bool operator == (const AutoData & rhs ) const { if( getmpg( ) == rhs.getmpg( ) ) { return gethorsepower( ) == rhs.gethorsepower( ); } else { return false; } } bool operator > ( const AutoData & rhs ) const { if( rhs.getmpg( ) > getmpg( ) ) { return true; } else if( getmpg( ) == rhs.getmpg( ) ) { if( rhs.gethorsepower( ) > gethorsepower( ) ) { return true; } } else { return false; } } private: float mpg; int cylinders; float displacement; float horsepower; float weight; float acceleration; int modelYear; int origin; string carName; }; 

Any help / advice anyone can provide would be greatly appreciated !! Thanks

+6
source share
3 answers

I want to do std::cout << AutoData(); , you need to overload the operator stream output operator<< :

 std::ostream& operator<< (std::ostream &out, AutoData const& data) { out << data.getmpg() << ':'; out << data.getcylinders() << ':'; // and so on... return out; } 

This function is not a member function, and since you have getters for each attribute, you do not need to declare this function as a friend your class.

Then you can do:

 AutoData myAuto; std::cout << myAuto << '\n'; 
+7
source

What have you tried? My approach will overload operator<< , for example:

 std::ostream& operator<<(std::ostream& out, const AutoData& dasAuto) { return out << dasAuto.getmpg() << ':' << dasAuto.getcylinders() << /* insert everthing in the desired order here */ std::endl; } 

And the same goes for the read function, for example:

 std::istream& operator>>(std::istream& in, AutoData& dasAuto) { float mpg; int cylinders; float displacement; float horsepower; float weight; float acceleration; int modelYear; int origin; string carName; char separator; const char SEP = ':'; if( !(in >> mpg >> separator) || (separator != SEP) ) return in; if( !(in >> cylinders >> separator) || (separator != SEP) ) return in; /* rinse, repeat */ if( !std::getline(in, carName) ) return in; dasAuto.setAuto(mpg, cylinders /*, etc etc */); return in; } 
+3
source

You can read this art to learn about friend and operator << , http://www.cprogramming.com/tutorial/friends.html

In the AutoData class AutoData you must declare this function:

 friend ostream& operator<< (ostream& out, const AutoData& obj); 

outside the class, you should define this function as follows:

 ostream& operator<< (ostream& out, const AutoData& obj) { out<<obj.mpg<<":"; //do what you want return out; } 
0
source

All Articles