我有关于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()
不起作用。基本上,当创建Car
(new Car
)的新实例时,我希望这辆车获得起始位置= 5(来自car.cpp
),但最终命令不起作用
有人可以给我一些如何解决这个问题的提示吗?我认为这不应该太困难,但我花了好几个小时试图搞清楚,我无法解决它!任何帮助将不胜感激。
答案 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
的任何方法都不是虚拟的(特别是析构函数!)