copy constructor,destructor 和copy assignment operator

本文详细介绍了C++中类的拷贝构造函数、拷贝赋值函数及析构函数的实现与使用方法,包括动态内存管理与智能指针的应用。
转自:http://patmusing.blog.163.com/blog/static/1358349602009113061024796/

#include <iostream>
using namespace std;

class Point
{
public:
         int _x;
         int _y;
 
public:
         Point();
         Point(int, int);
};
 
Point::Point()
{
         _x = 0;
         _y = 0;
}
 
Point::Point(int x, int y)
{
         _x = x;
         _y = y;
}
 
class CA
{
public:
         Point* _point;
 
public:
         CA(const Point*);
         void setPointValues(int, int);
         void printCoordinates();
 
         // 需要增加的拷贝构造函数
         CA(const CA&);
         // 需要增加的析构函数
         virtual ~CA();
         // 需要增加的拷贝赋值函数
         CA& operator = (const CA&);
};
 
CA::CA(const Point* point)
{
         _point = new Point();                   // 发生了动态内存分配!因此不能缺少析构函数。
         _point->_x = point->_x;
         _point->_y = point->_y;
}
 
// 需要增加的拷贝构造函数的实现
CA::CA(const CA& ca)
{
         _point = new Point();
         _point->_x = (ca._point)->_x;
         _point->_y = (ca._point)->_y;
}
 
// 需要增加的析构函数的实现
CA::~CA()
{
         if(!_point) delete _point;
}
 
// 需要增加的拷贝赋值函数的实现
CA& CA::operator = (const CA& ca)
{
         _point = new Point();
         _point->_x = (ca._point)->_x;
         _point->_y = (ca._point)->_y;
 
         return *this;
}
 
void CA::setPointValues(int x, int y)
{
         _point->_x = x;
         _point->_y = y;
}
 
void CA::printCoordinates()
{
         cout << "Coordinates = (" << _point->_x << ", " << _point->_y << ")" << endl;
}
 
int main(void)
{
         Point apoint(1, 2);
         CA ca(&apoint);
         ca.printCoordinates();
 
         CA cb(ca);                                               // 调用拷贝构造函数
         cb.printCoordinates();
 
         cb.setPointValues(12, 12);
         cb.printCoordinates();
         ca.printCoordinates();
 
         CA cc = cb;                                              // 调用拷贝赋值函数
         cc.printCoordinates();
         cc.setPointValues(13, 13);
        
         ca.printCoordinates();
         cb.printCoordinates();
         cc.printCoordinates();
 
         return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值