在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
class Vehicle { public: virtual double Weight() const = 0; virtual void Start() = 0; //【3】 //存储就肯定得有复制,但是我们不知道派生类的类型,我们无法自己进行复制 //一个比较好的方法就是用多态的机制,让派生类自己进行复制,然后通过返回值的形式进行传递 //我们叫虚复制函数 virtual Vehicle* copy() const = 0; // ... }; class RoadVehicle: public Vehicle { public: double Weight() const { return 1.0; } void Start() {} //【4】 //定义RoadVehicle类的copy函数 Vehicle* copy() const { return new RoadVehicle(*this); } /* ... */ }; class Automobile: public Vehicle { public: double Weight() const { return 1.0; } void Start() {} //【5】 //定义Automobile类的copy函数 Vehicle* copy() const { return new Automobile(*this); } /* ... */ }; //【2】 //我们可以通过定义一个新的类,叫做Vehicle的代理类,来执行【1】中的情况 //代理类有能力让Vehicle的派生类存放在同一个容器中,而不必知道派生类的类型 class VehicleSurrogate { public: //【7】 //构造函数和赋值操作符的定义 VehicleSurrogate():_v(0) {} VehicleSurrogate(const Vehicle& v):_v(v.copy()) {} ~VehicleSurrogate() { delete _v; } VehicleSurrogate(const VehicleSurrogate& v):_v(v._v ? v._v->copy() : 0) {} VehicleSurrogate& operator=(const VehicleSurrogate& v) { if(this != &v) { delete _v; _v = (v._v ? v._v->copy() : 0); } return *this; } //【8】 //定义所代理的对象的操作 double Weight() const { if(_v != 0) return _v->Weight(); } void Start() { |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论