如何为包含指向(抽象)基类的指针的类定义拷贝构造函数或复制操作符

来源:互联网 发布:快速模板匹配算法 编辑:程序博客网 时间:2024/05/16 07:10
#include <iostream>using namespace std;// 如何为包含指向(抽象)基类的指针的类定义拷贝构造函数或复制操作符class Shape{public:Shape(){cout << "Shape::Shape()" << endl;}virtual ~Shape(){cout << "Shape::~Shape()" << endl;}virtual Shape* clone() const = 0;};class Circle : public Shape{public:Circle(){cout << "Circle::Circle()" << endl;}~Circle(){cout << "Circle::~Circle()" << endl;}virtual Shape* clone() const{return new Circle(*this);}};class Square : public Shape{public:Square(){cout << "Square::Square()" << endl;}~Square(){cout << "Square::~Square()" << endl;}virtual Shape* clone() const{return new Square(*this);}};class Fred{public:Fred(Shape* p) : p_(p){cout << "Fred::Fred()" << endl;}~Fred(){cout << "Fred::~Fred()" << endl;delete p_;}Fred(const Fred& f) : p_(f.p_->clone()){}Fred& operator =(const Fred& f){if (this != &f){Shape* p2 = f.p_->clone();delete p_;p_ = p2;}return *this;}private:Shape* p_;};int _tmain(int argc, _TCHAR* argv[]){Shape *circle = new Square();Fred *fred = new Fred(circle);delete fred;//delete circle;system("pause");return 0;}

原创粉丝点击