【问题标题】:std::vector for parent and child class父类和子类的 std::vector
【发布时间】:2012-10-26 17:05:32
【问题描述】:

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

这就是我的工作..

Vehicle 是父类

Car 是子类

关于 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)

【问题讨论】:

  • 什么是Vechicle2D?创建可以包含父类和子类的向量的方法是拥有一个指向父类的指针向量,并使用虚拟函数,@987654325换句话说,@。

标签: c++ stdvector


【解决方案1】:

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

vector<std::unique_ptr<Vechicle>> vehicleVector;

你可以做的:

vehicleVector.push_back(new Vehicle);
vehicleVector.push_back(new Car);

拥有一个对象向量将切断所有超出Vechicle 的类型信息 - 因此,Car 将变成Vehicle,丢失所有附加信息。

【讨论】:

  • OP 似乎对多态性的工作原理感到困惑,基于他如何使用 list.push_back( Vehicle() );list.back().setName(vehicleName); 而不是 car-&gt;setName(vehicleName);list.push_back(car);
  • 确实不适合我.. 我尝试推回新车,但它似乎不起作用
  • @user1777711 那是因为你做错了。但如果没有真正的代码,就很难知道原因。
  • @user1777711 你改变了向量的声明吗?
  • @user1777711 你#include &lt;memory&gt;了吗?
【解决方案2】:

我遇到了同样的问题,我先使用然后使用 c++14 进行编译来修复它。 11 也可以,但我想使用 14 的一些新功能,所以我这样做了。我希望这会有所帮助!

#include <memory>

std::vector<std::unique_ptr<sf::Shape>> _shapes;

【讨论】:

    猜你喜欢
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2019-10-12
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多