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.

War es hilfreich?

Lösung

Im Allgemeinen wird Ihre get / set-Funktionen sollten gut funktionieren. Einige andere Kommentare:

  • Die year, make und speed 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 oder make oder stellen Sie den speed direkt sein.
  • Der Konstruktor sollte newYear und newMake als Parameter übernehmen.
  • accelerate() und break() sollte die speed gespeichert im Auto Objekt ändern, nicht nur einen Wert zurückgeben anders speed.
  • using namespace std; können viele unerwartete Namen auf den globalen Namensraum importieren und es ist oft vorzuziehen, anstatt explizit qualifizierte Namen wie std::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:

       
  1. 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.
  2.    
  3. 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 Sie this->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 verwendet speed als Name eines Parameters) oder einen ‚m‘ zu verwenden ( „Mitglied“), gefolgt von einem Unterstrich.
  4.     
  5. 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, oder const Car&. Verwenden Sie zum Beispiel int getSpeed()const statt int getSpeed() es konstant zu erklären.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top