Wie verwenden Sie Sets und wird in C ++?
Frage
Ich habe sie in Java verwendet und schien nicht zu viele Probleme zu haben, aber ich bin nicht sie sehr gut in C ++ zu erfassen. Die Zuordnung ist:
Write a class named Car that has the following member variables:
year. An int that holds the car's model year.
make. A string that holds the make of the car.
speed. An int that holds the car's current speed.
In addition, the class should have the following member functions.
Constructor. The constructor should accept the car's year and make
as arguments and assign these values to the object's year and
make member variables. The constructor should initialize the
speed member variable to 0.
Accessors. Appropriate accessor functions should be created to allow
values to be retrieved from an object's year, make, and speed
member variables.
accelerate. The accelerate function should add 5 to the speed member
variable each time it is called.
brake. The brake function should subtract 5 from the speed member
variable each time it is called.
Demonstrate the class in a program that creates a Car object, and then
calls the accelerate function five times. After each call to the
accelerate function, get the current speed of the car and display
it. Then, call the brake function five times. After each call to
the brake function, get the current speed of the car and display it.
Bisher ist dies, was ich habe, aber ich bin ziemlich sicher, dass ich völlig falsch bin. Wenn jemand einen Rat hat würde ich wirklich zu schätzen, danke!
#include<iostream>
#include<string>
using namespace std;
class Car
{
public:
int year;
string make;
int speed;
Car()
{
setYear(newYear);
setMake(newMake);
setSpeed(0);
}
void setYear(int newYear)
{
year = newYear;
}
void setMake(string newMake)
{
make = newMake;
}
int getYear()
{
return year;
}
string getMake()
{
return make;
}
int accelerate(int speed)
{
return (speed+5);
}
int brake(int speed)
{
return (speed-5);
}
};
int main()
{
return 0;
}
PS: Der Haupt hat return 0; lediglich ein Platzhalter nur versucht, die ganzen „bekommen und setzen Sie“, was zu verstehen.
Lösung
Im Allgemeinen wird Ihre get / set-Funktionen sollten gut funktionieren. Einige andere Kommentare:
- Die
year
,make
undspeed
Variablen wahrscheinlich privat sein sollte, sonst würde es wirklich nicht nötig sein, get / set-Funktionen für sie haben, da könnten die Variablen auch direkt geändert werden. - Wahrscheinlich sollte es nicht sein Set-Funktionen überhaupt. Ich glaube nicht, es soll möglich Änderung der
year
odermake
oder stellen Sie denspeed
direkt sein. - Der Konstruktor sollte
newYear
undnewMake
als Parameter übernehmen. -
accelerate()
undbreak()
sollte diespeed
gespeichert im Auto Objekt ändern, nicht nur einen Wert zurückgeben andersspeed
. -
using namespace std;
können viele unerwartete Namen auf den globalen Namensraum importieren und es ist oft vorzuziehen, anstatt explizit qualifizierte Namen wiestd::string
zu verwenden.
Andere Tipps
Einige Probleme sehe ich:
Sie beziehen sich auf Variablen im Konstruktor, der nicht an den Konstruktor übergeben wurden (newYear
, newMake
)
Die accelerate
und decelerate
Funktionen modifizieren keinen Zustand; sie fügen Sie einfach und subtrahieren 5 von einer Geschwindigkeit, die in übergeben wird - ich glaube nicht, dass sie auf diese Weise verhalten soll. Beachten Sie, dass das Problem Beschreibung sagt, dass sie / subtrahieren vom speed
Membervariable hinzufügen.
Alle Ihre Mitgliedsvariablen sind öffentlich. Würden Sie dies in Java tun?
Sie wollen wahrscheinlich die internen Variablen privat machen, da sie nur durch Methoden innerhalb der Klasse aktualisiert werden soll. Zweitens müssen Sie Parameter an den Konstruktor so, dass Sie das Jahr einstellen und zunächst machen.
Beispiel:
public:
Car(int newYear, string newMake) {...}
class Car
{
private:
int year;
string make;
int speed;
public:
Car(int newYear, string newMake)
{
setYear(newYear);
setMake(newMake);
setSpeed(0);
}
...
}
Sie aktualisieren auch nicht die Werte der Geschwindigkeit auf Ihren accelerate
und brake
Methoden.
Versuchen Sie:
return (speed -=5);
oder
return (speed += 5);
Die accelerate()
und brake()
Funktionen auf dem speed
Mitglied arbeiten sollte, anstatt nur den geänderten Wert zurückkehrt. Das bedeutet, die Zuordnung entsprechend speed
.
Auch Mitglieder, die Accessoren haben in der Regel private
oder protected
gemacht statt Öffentlichkeit gelassen zu werden.
Der Getter und Setter-Methode wird verwendet, um Daten Einkapselung zu erreichen, so dass nur die Teilnehmer, wird nur die Datenzugriffs Mitglieder der Klasse.
Einige Kommentare:
- Ihre Membervariablen sein sollte privat , nicht öffentlich als sie öffentlich bricht Verkapselung machen und Niederlagen der Zweck sie den Zugriff auf Accessor (Getter / Setter) Funktionen.
- Ihre Funktionsnamen und Funktionsparameter überschatten die Namen Ihrer Membervariablen, die einige der Verwirrung führt. So wie in Java, wo Sie
this.x
verwenden müssen die Membervariable „x“ aus dem Parameter „x“ zu unterscheiden, ähnlich müßten Siethis->x
verwenden. Dies kann jedoch vermieden werden, wenn Sie immer Ihren Mitgliedsvariablen eine Art Präfix geben. Zwei gängige Konventionen sind Membervariablen mit einem Unterstrich Präfix (z benennen Sie Ihre Membervariable_speed
und verwendetspeed
als Name eines Parameters) oder einen ‚m‘ zu verwenden ( „Mitglied“), gefolgt von einem Unterstrich. - Jede Funktion, die die Daten nicht ändern - das heißt, alle Ihre Funktionen „Getter“ - sollte mit dem Schlüsselwort const , erklärt werden, so dass diese Daten von einem
const Car
zugegriffen werden kann, oderconst Car&
. Verwenden Sie zum Beispielint getSpeed()const
stattint getSpeed()
es konstant zu erklären.