继承来自基类(vehicle)的方法和派生类(car)中的值,以使用C ++

时间:2018-01-02 12:31:46

标签: c++ class inheritance derived-class base-class

我有关于C ++继承的问题。 Vehicle类具有SetStartingPosition()GetStartingPosition()个函数。 Car类继承这些函数,并使用SetStartingPosition(5)在构造函数中将起始位置设置为5。

我想要的是当使用new Car函数将新车辆(Lane)添加到车道(AddVehicleToALane(Vehicle* vehicle)类)时,此位置Car被赋值为5.

Vehicle.h:

Class Vehicle{
public:
    Vehicle();
    Vehicle(double position);
    virtual ~Vehicle();
    void SetStartingPosition(double startingpos){
        fStartingPos = startingpos
    }

    double GetStartingPosition(){
        return fStartingPos;
    }

private:
    double fStartingPos;
}    

Car.h:

#include "vehicle.h"
Class Car: public Vehicle{
public:
    Car();
    Car(double position);
}

Car.cpp:

Car::Car(double position): Vehicle(position){
    SetStartingPosition(5);
}

Lane.h:

#include "vehicle.h"
#include "car.h"
Class Lane{
public:
    void AddRandomVehicle();

    void AddVehicleToALane(Vehicle* vehicle){
     fVehicles.push_back(vehicle);
    }

private:
    std::vector<Vehicle*> fVehicles;
    Vehicle *v;
}

Lane.cpp:

void Lane::AddRandomVehicle(){
    int i = 0;
    AddVehicleToALane(new Car(fVehicles[i]->GetStartingPosition()));
}

最终命令v->GetStartingPosition()不起作用。基本上,当创建Carnew Car)的新实例时,我希望这辆车获得起始位置= 5(来自car.cpp),但最终命令不起作用

有人可以给我一些如何解决这个问题的提示吗?我认为这不应该太困难,但我花了好几个小时试图搞清楚,我无法解决它!任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

您的代码有很多问题。

永远不会分配

Lane::v,因此当您v->GetStartingPosition()时,您有未定义的行为。

Vehicle没有接受double的构造函数,因此Car::Car(double position): Vehicle(position)是语法错误。

Car::Car(double position)是私有的,因此您只能new Car(...)方法中的Car

为什么汽车需要double position然后覆盖它?为什么不Car::Car() { SetStartingPosition(5); }

为什么你总是有Car课程?在构造之后,你没有任何东西可以将它与Vehicle区分开来,Vehicle的任何方法都不是虚拟的(特别是析构函数!)