父类和子类的std :: vector

use*_*711 0 c++ stdvector

我需要创建一个可以包含我的父类和子类数据的向量.

这就是我做的..

车辆是父类

汽车是儿童班

关于Car.cpp,它得到了以下内容

struct Point
{
    int x,y
};

class Car : public Vehicle
{
private:
    Point wheelPoint[4];
    double area;

public:
    void setPoint();
};

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

    cout << "Please enter X:";
    cin >> xData;

    cout << "Please enter Y:";
    cin >> yData;

    wheelPoint[i].x = xData;
    wheelPoint[i].y = yData;
}
Run Code Online (Sandbox Code Playgroud)

然后在我的main.cpp

在我的main.cpp

vector<VehicleTwoD> list;
VehicleTwoD *vehicle;
Car *car = new Car;
string vehicleName;

cout << "Please input name of vehicle";
cin >> vehicleName;

vehicle = new Car;
car->setPoint();

list.push_back( Vehicle() );
list.back().setName(vehicleName);
Run Code Online (Sandbox Code Playgroud)

这里的问题..我如何将我的wheelPoint of car也放入此向量中.

我想要实现的是一个可以包含的向量

Vehicle Name: Vehicle Name (private variable at Vehicle - Parent Class)
Wheel Point[0]: Point (X,Y) ( private var at Car - Child Class)
Wheel Point[1]: Point (X,Y) ( private var at Car - Child Class)
Wheel Point[2]: Point (X,Y) ( private var at Car - Child Class)
Wheel Point[3]: Point (X,Y) ( private var at Car - Child Class)
Run Code Online (Sandbox Code Playgroud)

Luc*_*ore 8

对象容器受到对象切片的影响.你需要一个指针向量(最好是智能的):

vector<std::unique_ptr<Vechicle>> vehicleVector;
Run Code Online (Sandbox Code Playgroud)

你可以做到:

vehicleVector.push_back(new Vehicle);
vehicleVector.push_back(new Car);
Run Code Online (Sandbox Code Playgroud)

拥有一个对象向量将切断所有超出的类型信息Vechicle- 因此,a Car将变为a Vehicle,丢失所有其他信息.