1. ホーム
  2. c++

[解決済み] 自動車クラス/コンストラクタ C++

2022-03-11 06:31:17

質問

この課題のコンストラクタの部分を理解するために、壁に頭を打ち付けているところです。教科書を読んだり、オンラインで調べたりしています。どなたか、正しい方向を示していただけませんか?以下のコードは完全に動作し、コンストラクタを追加する必要があります。

この課題の指示は以下の通りです。 車のクラスの指示。

以下のメンバ変数を持つクラス'Car'を作成しなさい。

年です。車の年式を保持するint型。

make. 車のメーカーを保持する文字列オブジェクト。

speed. 車の現在の速度を保持するint型オブジェクトです。

また、このクラスは以下のメンバ関数を持つ必要があります。

コンストラクタ。コンストラクタには、車の年式とメイクのメンバ変数を受け入れる必要があります。コンストラクタはこれらの値をオブジェクトのyearとmakeメンバ変数に初期化する必要があります。コンストラクタは、speed メンバ変数を 0 に初期化する必要があります。

アクセッサー。オブジェクトの年、メーカー、スピードの各メンバー変数から値を取得できるように、適切なアクセッサ関数を作成する必要があります。

加速する。加速度関数は、呼び出されるたびに speed メンバー変数に 5 を追加する必要があります。

ブレーキ ブレーキ関数は、呼び出されるたびに speed メンバー変数から 5 を減算する必要があります。

Car オブジェクトを作成し、accelerate 関数を 5 回呼び出すプログラムで、このクラスのデモを行います。加速関数を呼び出すたびに、車の現在の速度を取得し、それを表示します。次に、ブレーキ関数を5回呼び出します。ブレーキ関数を5回呼び出すたびに、車の現在の速度を取得し、それを表示します。

#include<iostream>
#include<string>

using namespace std;

class Car
{
private:
int year;
string make;
int speed = 0;

public:
void setYear(int);
void setMake(string);
void setSpeed(int);
int getYear();
string getMake();
int getSpeed();
void accelerate();
void brake();


};
void Car::setYear(int y)
{year = y;}
int Car::getYear(){
return year;}

void Car::setMake(string m)
{make = m;}
string Car::getMake(){
return make;}

void Car::setSpeed(int spd)
{speed = spd;}
int Car::getSpeed(){
return speed;}

void Car::accelerate()
{speed +=5;}

void Car::brake()
{
if( speed > 5 )
    speed -=5;
else speed = 0 ;
}


int main()
{
Car myCar;
int bYear = 0;
string bMake;
cout << "Please enter the year of the vehicle.\n";
cin >> bYear;
cout << "Please enter the make of the vehicle.\n";
cin >> bMake;

myCar.setYear(bYear);
cout << "You entered the year of the car as " << myCar.getYear() << endl;
myCar.setMake(bMake);
cout << "You entered the make of the car as " << myCar.getMake() << endl;
int i = 0;
for (; i<5; ++i)
{
    myCar.accelerate();
    cout << "Accelerating.\n" << "The current speed of the car is: " << myCar.getSpeed() << endl;


}
{
    int j = 0;
    for (; j<5; ++j)
    {
        myCar.brake();
        cout << "Decelerating.\n"  << "The current speed of the car is: " << myCar.getSpeed()<<endl;

    }



}
}

解決方法は?

ここにいます。

クラス定義の中で、次のようにコンストラクタを定義することもできます。

Car( int year, const std::string &make ) : year( year ), make( make ), speed( 0 )
{
}

または、クラス定義で宣言します。

Car( int year, const std::string &make );

を定義し、それをクラス定義の外で定義します。

Car::Car( int year, const std::string &make ) : year( year ), make( make ), speed( 0 )
{
}

また、これらの関数を削除してください(課題の説明では必要ありません)。

void setYear(int);
void setMake(string);
void setSpeed(int);

という修飾子をつけて、これらの関数を宣言します。 const

int getYear() const;
string getMake() const;
int getSpeed() const;

最初にコンストラクタの値を入力し、その後でクラスのオブジェクトを定義することを考慮に入れてください。

int main()
{
int bYear = 0;
string bMake;
cout << "Please enter the year of the vehicle.\n";
cin >> bYear;
cout << "Please enter the make of the vehicle.\n";
cin >> bMake;

Car myCar( bYear, bMake );
^^^^^^^^^^^^^^^^^^^^^^^^^