Nate - 1 year ago 106

C++ Question

I want to write a print function for a class AutoData that has information about cars in it. With this print function, I would ideally like to print out a vector that contains many different class objects. I have already written get functions for each element of the objects, but I am still a bit unsure of how to go about using those to write a function to print out the data in the following format:

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

For example:

`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

The class is:

`#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 very much appreciated!! Thanks

Recommended for you: Get network issues from **WhatsUp Gold**. **Not end users.**

Answer Source

I you want to be able to something like `std::cout << AutoData() ;`

, you need to overload `operator<<`

:

```
std::ostream& operator<< (std::ostream & out, AutoData const& data) {
out << data.getmpg() << ":" ;
out << etc...
return out ;
}
```

This function goes out of the class scope, and because you've created getters for all attributes, this function does not have to be a friend of your class.

Then you can do :

```
AutoData myAuto ;
std::cout << myAuto << std::endl ;
```

Recommended from our users: **Dynamic Network Monitoring from WhatsUp Gold from IPSwitch**. ** Free Download**