Print-Funktion der Klasse c++
Möchte ich mal eine drucken-Funktion für eine Klasse AutoData, die Informationen über die Autos, die in es. Mit dieser Funktion drucken, würde ich am Liebsten ausdrucken-Vektor enthält viele verschiedene Objekte der Klasse. Ich habe bereits geschrieben get-Funktionen für jedes element der Objekte, aber ich bin noch ein bisschen unsicher, wie man über die über diejenigen zu schreiben, die eine Funktion zum drucken der Daten im folgenden format:
mpg:cylinders:displacement:horsepower:weight:acceleration:modelYear:origin:carName
Beispiel:
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
Klasse ist:
#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;
};
Jede Hilfe/Rat, den jemand bereitstellen können, wäre sehr dankbar!! Dank
- wenn Sie drucken möchten, auf Konsole einfach cout << mpg << ":" << Zylinder << ":" etc - wenn Sie möchten, speichern Sie in einem string verwenden Sie ein stringstream.
- aber wie kann ich drucken Sie eine gesamte Vektor für diese? so, dass seine mpg1:cylinders1:etc... mpg2:cylinders2:etc...
- Nur die Iteration über den Vektor und fügen Sie Zeilenumbrüche zwischen den Einträgen
- was ich sagte, Sie würden in Ihrer eigenen Methode, dann einfach Durchlaufen und jeden Vektor mit einem ranged based for-Schleife, wie Sie normalerweise würde.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wollen in der Lage sein zu tun
std::cout << AutoData();
Sie brauchen, um eine überlastung der output-stream-operatoroperator<<
:Diese Funktion ist nicht ein Mitglied die Funktion, und da haben Sie Getter für alle attribute, die Sie nicht deklarieren, da diese Funktion
friend
Ihrer Klasse.Dann können Sie tun:
const&
notation sehr unübersichtlich (lenkt von der Tatsache, dass die zugrunde liegendenAutoData
istconst
, nicht die Referenz), aber andere als die, es scheint, wir haben begonnen, geben Sie die gleiche Antwort zur gleichen Zeit 😀 aber ich wurde langsamer, weil ich versuchte, zu tunoperator>>
zu... Ah, und ich würde einfügenstd::endl
imoperator<<
so konnte ich garantieren, dass ich Lesen kanncarName
mitstd::readline
imoperator>>
...cons&
, aber vielleicht hast du Recht, für einen Anfänger könnte es verwirrend sein. Überstd::endl
ich denke, es sollte nicht in deroperator<<
, weil Sie wollen, könnten, mehrereAutoData
auf der gleichen Zeile, getrennt durch ein Koma / tab. Es hängt davon ab, was Sie wirklich braucht.AutoData::carName
und Durchsetzungoperator<<
, dannoperator>>
nicht wissen, wo der Datensatz endet. Deshalb würde ich mich eingelebt habe für die einfachere option beenden Sie die Aufzeichnung mitendl
und mitreadline
zu Lesen, die Letzte saite. Andere option wäre der terminator in einerstatic
MitgliedAutoData
- und matching-liest und schreibt es mit....Was haben Sie bisher ausprobiert? Mein Ansatz wäre eine überlastung
operator<<
wie:Und das gleiche für die "reading" - Funktion, wie:
auto
ist ein reserviertes Schlüsselwort in C++ 11.Lesen Sie diesen Artikel, um zu wissen, über
friend
undoperator <<
,http://www.cprogramming.com/tutorial/friends.html
In der Klasse
AutoData
sollten Sie erklären, dass diese Funktion:außerhalb der Klasse definieren Sie diese Funktion wie folgt: