c ++类的打印功能

Pse*_*udo 10 c++ iostream class vector object

我想为AutoData编写一个打印函数,其中包含有关汽车的信息.有了这个打印功能,我最好打印一个包含许多不同类对象的向量.我已经为对象的每个元素编写了get函数,但我仍然不确定如何使用它们来编写函数以下列格式打印出数据:

mpg:cylinders:displacement:horsepower:weight:acceleration:modelYear:origin:carName
Run Code Online (Sandbox Code Playgroud)

例如:

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
Run Code Online (Sandbox Code Playgroud)

这堂课是:

#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;
};
Run Code Online (Sandbox Code Playgroud)

任何人都可以提供的任何帮助/建议将非常感谢!! 谢谢

Hol*_*olt 10

如果您希望能够执行此操作std::cout << AutoData();,则需要重载输出流运算符operator<<:

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

此函数不是成员函数,并且由于每个属性都有getter,因此您不必friend在类中声明此函数.

然后你可以这样做:

AutoData myAuto;
std::cout << myAuto << '\n';
Run Code Online (Sandbox Code Playgroud)

  • @Massa我习惯使用`cons&`,但也许你适合初学者,这可能会令人困惑.关于`std :: endl`,我认为它不应该在`operator <<中,因为你可能想在同一行上放置多个`AutoData`,用逗号/制表符分隔.这取决于你真正需要的是什么. (3认同)