0

これが私の質問です - このコードを実行した後、いくつのオブジェクトが作成されますか?

        class vehicle
        { public:
            int Weight, HorsePower;
            vehicle(int x, int y)
            { Weight = x;
              HorsePower = y;
            }
        };
        class car : public vehicle
        { public:
            car(int x, int y) : vehicle(x, y)
            { }
        };
        class motorcycle : private vehicle
        { public:
            motorcycle(int x, int y): 
            { Weight = x;
              HorsePower = y;
            }
        };

        int _tmain(int argc, _TCHAR* argv[])
        { car Ferrari(4056,540);
          motorcycle Suzuki(429,103);
          return 0;
        }

私と私の友人が議論しているのは、私の要点は、車、オートバイ、および 2 つの車両の 4 つのオブジェクトであるということです。それぞれが車両を派生させるからです。これは本当ですか?

4

4 に答える 4

7

コードの形式が正しくありません: vehicleには既定のコンストラクターがなく、の唯一のコンストラクターにmotorcycleは、そのvehicle基本クラスの既定のコンストラクターが必要です。

にデフォルトのコンストラクターが追加されたvehicle(そして のコンストラクターから不要な:コンストラクターが削除されたmotorcycle) と仮定すると、ここに示すユーザー コードでは 16 と数えます。

  • main: argcとへの 2 つの引数argv

  • Ferrari: carvehicleWeight、およびHorsePowerコンストラクターのxandy引数、およびcarコンストラクターのxandy引数の構成の 8 つvehicle

  • Suzuki: motorcyclevehicleWeight、およびコンストラクターへHorsePowerxandy引数の構成の 6 つmotorcycle

見逃していないことを願っています。C++ プログラムで作成されるオブジェクトの数を数えるのはばかげたことです。非常に多くのオブジェクトが作成されますが、通常は問題になりません。

于 2012-09-01T03:15:12.760 に答える
2

2 つのインスタンス(オブジェクト) のみが作成されます。クラス ( ) が から拡張されFerrariている場合でも、 は単一のオブジェクトです。についても同じです。carvehicleSuzuki

于 2012-09-01T03:10:02.593 に答える
0

私は2つを選びます。

carおよびは、基本クラスからエンティティを分離するmotorcycleことはできません。4 つの個別のインスタンスはありません。また、4 つのデストラクタを個別に呼び出すこともできません。このような単純な派生の低レベルの実装も 2 を示します。Derived クラスには、Base + とその余分なフィールドと同じフィールドがあります。carそのvehicle部分なしで をインスタンス化することはできません。したがって、少なくとも私の意見では、それを別のオブジェクトと呼ぶことはできません。

また、その形式の質問は非常に漠然としていると思います。オブジェクトの数とはどういう意味ですか? 作成されるインスタンスの数を明記する必要があると思います。または、いくつの異なるオブジェクト タイプがありますか。

全部で 2 つのインスタンスがあります。1 つは でありcar、1 つは でmotorcycleあり、両方がvehicle同時に存在します。

PS。私の頭に浮かんだ別のクロスチェック。sizeof(Ferrari)、 を呼び出しmotorcycle(Suzuki)ます。それを合計します。次に、2xvehicleを追加して、それらのサイズも取得します。4 つのインスタンスの合計は異なり、大きくなるはずです。「車、バイク、乗り物2台の4つのオブジェクト」よりも少ないと言えば十分だと思います。

于 2012-09-01T03:50:27.107 に答える
0

答えは「2」です。どちらのオブジェクトも基本クラスを継承しますが、基本クラスはそれに「吸収」されます。各オブジェクトは、基本クラスの単一のインスタンスとして効果的に機能し、その上に「新しいもの」がレイヤー化されます。

このように考えてみてください: ゴルフボールを取り、野球ボールと同じサイズ/重さ/等になるまで毛糸/等で包むことを想像してみてください。見た目はゴルフ ボールとは異なり、分解すると「中」のゴルフ ボールにアクセスできますが、それでも 1 つのオブジェクトになります。事実上、ベースボール外殻を持つゴルフボールです。しかし、「ゴルフ ボール」が単独で存在したり、他のものと一緒にラップして新しいタイプのオブジェクト (ボーリング ボールなど) を作成したりできたとしても、それは依然として 1 つのオブジェクトです。

于 2012-09-01T08:18:46.527 に答える