我有一个多级继承(来自Ship类 - > MedicShip类 - > Medic类),其虚函数代码如下所示。我想结果应该是:
Medic 10
Medic 10
但它产生了奇怪的结果。另一方面,如果我只使用一级继承(从Ship类 - > Medic类中没有MedicShip类),结果将是正常的。你能找到我的错吗?非常感谢....
#ifndef FLEET_H
#define FLEET_H
#include <string>
#include <vector>
using namespace std;
class Ship
{
public:
Ship(){};
~Ship(){};
int weight;
string typeName;
int getWeight() const;
virtual string getTypeName() const = 0;
};
class MedicShip: public Ship
{
public:
MedicShip(){};
~MedicShip(){};
string getTypeName() const;
};
class Medic: public MedicShip
{
public:
Medic();
};
class Fleet
{
public:
Fleet(){};
vector<Ship*> ships;
vector<Ship*> shipList() const;
};
#endif // FLEET_H
#include "Fleet.h"
#include <iostream>
using namespace std;
vector<Ship*> Fleet::shipList() const
{
return ships;
}
int Ship::getWeight() const
{
return weight;
}
string Ship::getTypeName() const
{
return typeName;
}
string MedicShip::getTypeName() const
{
return typeName;
}
Medic::Medic()
{
weight = 10;
typeName = "Medic";
}
int main()
{
Fleet fleet;
MedicShip newMedic;
fleet.ships.push_back(&newMedic);
fleet.ships.push_back(&newMedic);
for (int j=0; j< fleet.shipList().size(); ++j)
{
Ship* s = fleet.shipList().at(j);
cout << s->getTypeName() << "\t" << s->getWeight() << endl;
}
cin.get();
return 0;
}
答案 0 :(得分:1)
您尚未创建任何类Medic
的实例。你的意思是说
Medic newMedic;
而不是
MedicShip newMedic;
也许?因此,Medic
构造函数未被调用,weight
和typeName
未被初始化。
答案 1 :(得分:0)
~Ship(){};
第一个错误就在这里。如果要通过基类指针删除派生类对象,则此析构函数应为virtual
。