0

関連:配列C ++の子クラス

こんにちは皆さん、申し訳ありませんが、私はいくつかの仕事で立ち往生しています。

基本的にはこうなります

親クラスの呼び出し車両があり、2 つの子クラスの呼び出しがありました

Car and Motorcycle

親クラスには次の値があります。

string Name: value either Car or MotorCycle
wheels : 4 or 2 (depends is car or motorcycle)
Notes On Wheel:
wheel[0] : Fine condition
wheel[1] : need some repair
wheel[2] : Fine condition
wheel[3] : Fine condition

これをすべてVehicleTwoD配列に記録するにはどうすればよいのだろうか

Car / Motorcycle は Vehicle の子クラスですが、皆さんは何を提案しますか。VehicleTwoD vehtwod[100]; のオブジェクトを作成しようとしています。

次に、for ループを実行してプロンプトを出します。しかし、オブジェクトの車/オートバイを VehicleTwoD 配列に記録する方法と、文字列配列も内部に記録する方法を教えてください。したがって、すべての VehicelTwoD 配列要素には情報が含まれます

Name ( Motorcycle or Car)
Wheel ( depend on name - 2 or 4)
String array - notes size depend on what is choosen

すべてを 1 つの配列に記録する方法を教えてください。

どうもありがとう、私はこれがポリモーフィックであることを知っています、そしてこれがOOPであることを知っています、そして私はもっと勉強する必要があることを知っています. しかし、他の配列を保持できるような配列を作成する際に、この部分に本当にこだわりました。

ありがとう!

4

1 に答える 1

2

ストレージアレイの無関係な次元に対処しないことにより、ソリューションを簡素化します。

Vehicleポインタの配列を作成し、それらを格納します。

vector<unique_ptr<Vehicle>> vehicles_;
vehicles_.push_back(new Car(...));
vehicles_.push_back(new Motocycle(...));

unique_ptrここでは生のポインタの代わりに使用しているので、明示的にする必要はありませんdelete

クラスをポリモーフィックにすることで、基本クラスで関数を宣言し、派生クラスで定義を提供することでクラス固有の機能を実装できます。これにより、派生型にキャストしなくても、基本クラスへのポインタを介してメソッドを呼び出すことができます。

派生クラスにのみ存在するメソッドを呼び出す必要がある場合は、ポインターをキャストする必要があります。これはdynamic_cast、を使用して実行する必要があり、クラスが多態的である必要があります。

編集:

あなたのコメントは、あなたがaの使い方を知らずvector、生の配列を使いたいと思っていることを示唆しています。それも結構です。これは、生のポインターのCスタイルの配列を使用する単純化された例です。コードをより脆弱にし、エラーが発生しやすくするvectorようなスマートポインターも使用しないことで、配列サイズ(グロス)にマジックナンバーを使用しなければならない場合が多いことに注意してください。unique_ptr

Vehicle* vehicles_[100];
vehicles_[0] = new Car(...);
vehicles_[1] = new Motorcycle(...);
于 2012-10-25T18:38:09.560 に答える