2

私はそれらをJavaで使用していて、それほど多くの問題はないようですが、C++ではあまりよく理解していません。割り当ては次のとおりです。

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.

これまでのところ、これは私が持っているものですが、私は完全に間違っていると合理的に確信しています。誰かアドバイスがあれば本当にありがたいです、ありがとう!

#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:メインは0を返します。純粋に「取得して設定」すること全体を理解しようとするプレースホルダーとして。

4

6 に答える 6

4

通常、get/set 関数は正常に動作するはずです。その他のコメント:

  • 、および変数はおそらくプライベートにする必要があります。それ以外の場合はyear、変数を直接変更することもできるため、get/set 関数を使用する必要はまったくありません。makespeed
  • おそらく、集合関数はまったく存在しないはずです。yearまたはmakeまたは をspeed直接変更できるようにすることは意図されていないと思います。
  • コンストラクターはパラメーターとしてnewYearandを取る必要がありnewMakeます。
  • accelerate()とは異なる値を返すだけでなく、 car オブジェクトに保存されているbreak()を変更する必要があります。speedspeed
  • using namespace std;は多くの予期しない名前をグローバル名前空間にインポートする可能性があり、std::string代わりに明示的に修飾された名前のようなものを使用することをお勧めします。
于 2010-02-09T04:17:13.950 に答える
1

私が見るいくつかの問題:

コンストラクターに渡されなかったコンストラクター内の変数を参照しています(newYearnewMake

accelerateand関数はdecelerate状態を変更しません。渡された速度から5を足したり引いたりするだけです-私は彼らがこのように振る舞うことになっているとは思いません。speed 問題の説明には、メンバー変数に加​​算/減算することが記載されていることに注意してください。

すべてのメンバー変数はパブリックです。これをJavaで行いますか?

于 2010-02-09T04:11:26.690 に答える
1

内部変数はクラス内のメソッドによってのみ更新される必要があるため、おそらく内部変数を非公開にする必要があります。次に、最初に年と作成を設定できるように、コンストラクターへのパラメーターが必要です。

元:

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);
    }
    ...
}

accelerateまた、brakeメソッドの速度の値を更新していません。試す:

return (speed -=5);

また

return (speed += 5);
于 2010-02-09T04:11:54.663 に答える
0

accelerate()andbrake()関数は、変更された値を返すだけでなく、メンバーを操作する必要がありspeedます。これは、必要に応じてに割り当てることを意味speedします。

また、アクセサを持っているメンバーは通常、公開されるprivateprotected、公開される代わりに作成されます。

于 2010-02-09T04:11:42.073 に答える
0

いくつかのコメント:

  1. メンバー変数は public ではなく private にする必要がありますpublicにするとカプセル化が破られ、アクセサー (getter/setter) 関数を使用してそれらにアクセスする目的が無効になるためです。
  2. 関数名と関数パラメーターがメンバー変数の名前を覆い隠しているため、混乱が生じています。this.xメンバー変数 "x" をパラメーター "x" と区別するために を使用する必要がある Javaと同様に、 this->x. ただし、メンバー変数に何らかの接頭辞を常に与えると、これを回避できます。2 つの一般的な規則は、メンバー変数の前にアンダースコアを付ける (たとえば、メンバー変数に名前を付け、パラメーターの名前として_speed使用speedする) か、'm' ("メンバー" の意味) に続けてアンダースコアを使用することです。
  3. データを変更しない関数 (つまり、すべての「getter」関数) はキーワードconstで宣言して、このデータにconst Carorからアクセスできるようにする必要がありますconst Car&。たとえば、定数を宣言する int getSpeed()const代わりに使用します。int getSpeed()
于 2010-02-09T04:51:15.630 に答える
0

getter メソッドと setter メソッドを使用してデータのカプセル化を実現し、クラス メンバーのみがクラスのデータ メンバーにのみアクセスできるようにします。

于 2010-02-09T04:12:26.567 に答える