我需要创建一个可以包含父类和子类数据的向量。
这就是我做的..
车辆是父类
汽车是儿童班
关于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;
}
然后在我的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);
这里的问题......我如何把我的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)
答案 0 :(得分:8)
对象容器受到对象切片的影响。你需要一个指针向量(最好是智能):
vector<std::unique_ptr<Vechicle>> vehicleVector;
你可以做的事情:
vehicleVector.push_back(new Vehicle);
vehicleVector.push_back(new Car);
拥有一个对象向量将切断超出Vechicle
的所有类型信息 - 因此,Car
将变为Vehicle
,从而丢失所有其他信息。
答案 1 :(得分:1)
我有同样的问题,我首先使用然后使用c ++ 14进行编译来修复它。 11也可以使用,但我想使用14的一些新功能,所以我这样做了。我希望这有帮助!
#include <memory>
std::vector<std::unique_ptr<sf::Shape>> _shapes;