0

ちょっとした情報

Parent Class: Vehicle
Child Class: Car & Motorcycle

私はあるstructものを手に入れました

struct Point 
{
    int x,y;
};

そして、私は&で次のことを行うsetPoint関数を取得しましたCarMotorcycle

Car4輪を手に入れてからMotorcycle2輪を手に入れました。

Carこの機能があります

class Car : public Vehicle
{
private:
    Point wheelPoint[4]; // if motorcycle then its wheelPoint[2]
public:
    Point getPoint();
    void setPoint();
}

void Car::setPoint()
{
    int xData,yData;

    for (int i=0;i<4;i++)
    {
         cout << "Please enter X  :" ;
         cin >> xData;
         cout << "Please enter Y  :" ;
         cin >> yData;
    }//end for loop
}//end setPoint

だから私getPointも機能を得ました..

Point Car::getPoint()
{
     return wheelPoint;
}

問題は私の main.cpp にあります、私は次のことをしました

int main()
{
     VehicleTwoD *vehicletwod[100];

     //assuming just car but there motorcycle too
     Car *mCar = new Car();
     Point myPoint;

     vechicletwod[0] = mCar;
     //here i did the setpoint, set other variable

     //then when i try retrieve
     myPoint = Car->getPoint();
     //no error till here.

     cout << sizeof(myPoint);
}

オートバイでも車でも、結果は常に 4 のままです。オートバイで 2、車で 4 ということはありません。何が悪いのかわからない

オートバイの設定値も設定したと仮定します。両方とも同じ結果を返します。メイン クラスにポイント myPoint が含まれていますが、wheelPoint[配列] を含めるのは不適切です

4

1 に答える 1

5

sizeof(myPoint)型のサイズを返す必要がありPointます(まあ、コードは最初からコンパイルされていませんが、コンパイルされた場合はそれが返されます)。CarそしてMotorcycle議論に入らないでください。

1つの代替手段は、virtual関数を次のようにすることですVechicle:

class Vechicle
{
    virtual int getNoWheels() = 0;
};

Carおよびで上書きするものMotorcycle:

class Car : public Vechicle
{
    int getNoWheels() { return 4; }
};
class Motorcycle : public Vechicle
{
    int getNoWheels() { return 2; }
};

そして電話。何かのようなもの:

VehicleTwoD *vehicletwod[100];
vehicletwod[0] = new Car;
vehicletwod[1] = new Motorcycle;

vehicletwod[0]->getNoWheels(); //returns 4
vehicletwod[1]->getNoWheels(); //returns 2

別の方法std::vector<Point>として、 a を のメンバーとして保持することもできVehicleます。

class Vehicle
{
   std::vector<Point> wheels;
   Vehicle(int noWheels) : wheels(noWheels) {}
   int getNoWheels() { return wheels.size() }
};

実際のクラスに応じて初期化します。例:

class Car
{
   Car() : Vehicle(4) {}
};

また、私は疑います:

myPoint = Car->getPoint();

Carはオブジェクトへのポインターではなく型であるため、コンパイルされます。次回は、コードを最小限に抑えて実際のコードを投稿してください。

于 2012-10-27T09:15:52.477 に答える