struct IVehicle {
// virtual double getTankVolume() const = 0;
// virtual double getPetrolAmount() const = 0;
// virtual void arrive() = 0;
// virtual int leave() = 0;
virtual ~IVehicle() {};
};
struct IBus : IVehicle {
// virtual int getPeopleCount() const = 0;
// virtual int getMaxPeople() const = 0;
};
struct ITruck : IVehicle {
// virtual double getCurrentLoad() const = 0;
// virtual double getMaxLoad() const = 0;
};
class Vehicle : public IVehicle { /* .. */ };
class Bus: public IBus { /* ... */ };
class Truck : public ITruck { /* ... */ };
class Expeditor : public IBus, public ITruck { /* ... */ };
int main() {
IVehicle* v = new Bus;
}
c3RydWN0IElWZWhpY2xlIHsKCiAgIC8vIHZpcnR1YWwgZG91YmxlIGdldFRhbmtWb2x1bWUoKSBjb25zdCA9IDA7CiAgIC8vIHZpcnR1YWwgZG91YmxlIGdldFBldHJvbEFtb3VudCgpIGNvbnN0ID0gMDsKICAgLy8gdmlydHVhbCB2b2lkIGFycml2ZSgpID0gMDsKICAgLy8gdmlydHVhbCBpbnQgbGVhdmUoKSA9IDA7CgogICB2aXJ0dWFsIH5JVmVoaWNsZSgpIHt9Owp9OwoKc3RydWN0IElCdXMgOiBJVmVoaWNsZSB7CiAgICAKICAgLy8gdmlydHVhbCBpbnQgZ2V0UGVvcGxlQ291bnQoKSBjb25zdCA9IDA7CiAgIC8vIHZpcnR1YWwgaW50IGdldE1heFBlb3BsZSgpIGNvbnN0ID0gMDsKfTsKCnN0cnVjdCBJVHJ1Y2sgOiBJVmVoaWNsZSB7CgogICAvLyB2aXJ0dWFsIGRvdWJsZSBnZXRDdXJyZW50TG9hZCgpIGNvbnN0ID0gMDsKICAgLy8gdmlydHVhbCBkb3VibGUgZ2V0TWF4TG9hZCgpIGNvbnN0ID0gMDsKfTsKCgpjbGFzcyBWZWhpY2xlIDogcHVibGljIElWZWhpY2xlIHsgLyogLi4gKi8gfTsKCmNsYXNzIEJ1czogcHVibGljIElCdXMgeyAvKiAuLi4gKi8gfTsKCmNsYXNzIFRydWNrIDogcHVibGljIElUcnVjayB7IC8qIC4uLiAqLyB9OwoKY2xhc3MgRXhwZWRpdG9yIDogcHVibGljIElCdXMsIHB1YmxpYyBJVHJ1Y2sgeyAvKiAuLi4gKi8gfTsKCgoKaW50IG1haW4oKSB7CiAgSVZlaGljbGUqIHYgPSBuZXcgQnVzOwp9Cg==