网站开发外包不给ftp,网站建设中数据库,合肥网页制作,wordpress动态模板原型模式(clone)——创建型模式
什么是原型模式#xff1f;
原型模式是一种创建型设计模式#xff0c; 使你能够复制已有对象#xff0c; 而又无需依赖它们所属的类。 总结#xff1a;需要在继承体系下#xff0c;实现一个clone接口#xff0c;在这个方法中以本身作为拷…原型模式(clone)——创建型模式
什么是原型模式
原型模式是一种创建型设计模式 使你能够复制已有对象 而又无需依赖它们所属的类。 总结需要在继承体系下实现一个clone接口在这个方法中以本身作为拷贝源调用自身拷贝构造函数并返回新对象地址(用基类指针接收)。
/************************************************************************* File Name: 8.Clone.cpp Author: Mail: Created Time: Wed Mar 13 17:55:27 2024************************************************************************/#include iostream
#include vectorusing namespace std;class Shape {
private:int x, y;
public:Shape() default;Shape(const Shape obj) {x obj.x;y obj.y;}virtual Shape* clone() 0;
};class Rectangle : public Shape {
private:int width, height;
public:Rectangle() default;Rectangle(const Rectangle obj) : Shape(obj) {width obj.width;height obj.height;}Shape* clone() override {return new Rectangle(*this);}
};class Circle : public Shape {
private:int radius;
public:Circle() default;Circle(const Circle obj) : Shape(obj) {radius obj.radius;}Shape* clone() override {return new Circle(*this);}
};vectorShape * vec;
vectorShape * backup;int main() {Rectangle *rec new Rectangle();vec.push_back(rec);Circle *cir new Circle();vec.push_back(cir);for (int i 0; i vec.size(); i) {backup.push_back(vec[i]-clone());}return 0;
}