[解決済み] 自動車クラス/コンストラクタ C++
質問
この課題のコンストラクタの部分を理解するために、壁に頭を打ち付けているところです。教科書を読んだり、オンラインで調べたりしています。どなたか、正しい方向を示していただけませんか?以下のコードは完全に動作し、コンストラクタを追加する必要があります。
この課題の指示は以下の通りです。 車のクラスの指示。
以下のメンバ変数を持つクラス'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 );
^^^^^^^^^^^^^^^^^^^^^^^^^
関連
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み] C++で、あるコンストラクタを別のコンストラクタから呼び出す(コンストラクタ・チェイニングを行う)ことは可能ですか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] C#でベースコンストラクタを呼び出す
-
[解決済み] コンストラクタ内の仮想メンバー呼び出し
-
[解決済み] あるコンストラクタを別のコンストラクタから呼び出す
-
[解決済み] ベースクラスのコンストラクタを呼び出す際のルールは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】構造体のベクター初期化について
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++